2013-11-21 10 views
7

非常に単純なデータセットがあり、テーブルの最初の列でtable()を実行しようとしましたが、Rはキャプション付きのエラーメッセージを返します。私はオンラインで検索しましたが、Rが私のテーブルをテーブルとして受け入れるので、なぜこれが起きるのかをよく理解していません...誰も助言することができますか?それは返ししかし

> table(tab$V1) 
    CA 1 
    CO 1 
    OH 2 

:あなたは

table(tabraw$V1) 
# 
# CA CO OH 
# 1 1 2 

を探している

> tabraw 
    V1  V2 
1 OH Cleveland 
2 OH Columbus 
3 CO Denver 
4 CA SanFran 

> tab <- table(tabraw) 

> tab 
    V2 
V1 Cleveland Columbus Denver SanFran 
    CA   0  0  0  1 
    CO   0  0  1  0 
    OH   1  1  0  0 

> table(tab$V1) 
Error in tab$V1 : $ operator is invalid for atomic vectors 
+0

'class(tab)'と 'str(tab)'とは何ですか? – Thomas

+3

'V1'はテーブルの列ではなく、その下にあるrownamesのラベルです。最初の「列」は「クリーブランド」の下にある列です。これは 'tab [、1]'や 'tab [、 'Cleveland']'でアクセスできます。 – joran

答えて

6

オブジェクトtabは、クラステーブルのオブジェクトであり、ない

すると、出力を期待してマイ$機能をサポートします。

また、あなたは、2Dのものがすべてのインデックスのプロパティ(そう[ dim-indices ])を継承行い、そこから行列としてテーブルオブジェクトを考える必要があります

rowSums(tab) 
# CA CO OH 
# 1 1 2 
3

tabオブジェクトから必要な情報を入手することができます

is.matrix(tab) # returns TRUE 

2dのテーブルよりも大きい場合は、配列クラスからアクセサ関数を継承します。アクセサ "$"を使用する唯一の(典型的なデータ)クラスは、リスト(データフレームが継承する)です。試してみてください:

tab[ , 1] # Or 
tab[ , "Cleveland"] 

(私は、彼らがリストとして振る舞うので、あなたは、そのアクセサといくつかの言語オブジェクトと環境オブジェクトの要素にアクセスすることができ、私は「$」についてとてもカテゴリされていないはずと仮定します。)

関連する問題