2013-11-21 16 views
7

Ho un set di dati molto semplice e ho provato a eseguire table() sulla prima colonna della tabella, ma R restituisce un messaggio di errore con didascalie. Ho cercato online ma non capisco perché questo potrebbe accadere, dato che R accetta il mio tavolo come un tavolo ... qualcuno potrebbe consigliarlo?

Il mio aspettarsi uscita:

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

Tuttavia ritorna:

> 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

Cosa sono 'class (tab)' e 'str (tab)'? – Thomas

+3

'V1' non è una colonna nella tabella, è solo un'etichetta per i nomi dei giocatori sotto di essa. La prima "colonna" è quella sotto "Cleveland". È accessibile tramite 'tab [, 1]' o 'tab [, 'Cleveland']'. – joran

risposta

6

Siete alla ricerca di

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

L'oggetto tab è un oggetto di tabella di classe e non lo fa supporta la funzione $.

È inoltre possibile ottenere le informazioni desiderate dall'oggetto tab con

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

Si dovrebbe pensare oggetti tabella come matrici da cui quelli 2D ereditano tutte le loro proprietà di indicizzazione (così [ dim-indices ]):

is.matrix(tab) # returns TRUE 

Se si dispone di una tabella maggiore di 2d, erediterà naturalmente le sue funzioni di accesso dalla classe dell'array. La sola classe (dati tipici) che usa "$" come accessor è la lista (da cui ereditano i dataframes). Prova:

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

(suppongo che non avrebbe dovuto essere così categorica di "$" È possibile accedere agli elementi di alcuni oggetti linguaggio e gli oggetti dell'ambiente con quella di accesso, in quanto si comportano come liste..)

Problemi correlati