2013-11-21 11 views
7

Mam bardzo prosty zestaw danych i próbowałem wykonać table() w pierwszej kolumnie tabeli, ale R zwraca napisany komunikat o błędzie. Szukałem w Internecie, ale nie do końca rozumiem, dlaczego tak się stało, ponieważ R akceptuje mój stół jako stolik ... czy ktoś mógłby doradzić?

Moja oczekiwać wyjścia:

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

Jednakże zwraca:

> 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

Czym jest "class (tab)" i "str (tab)"? – Thomas

+3

'V1' nie jest kolumną w tabeli, jest tylko etykietą dla rownames poniżej. Pierwsza "kolumna" to ta pod "Cleveland". Jest dostępny przez 'tab [, 1]' lub 'tab [, 'Cleveland']'. – joran

Odpowiedz

6

Szukasz

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

Przedmiotem tab Przedmiotem tabeli klasy i nie obsługuje funkcję $.

Można również uzyskać żądaną informację z obiektu tab z

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

Powinieneś pomyśleć o obiektach stołowych jak matryce, z których te 2D dziedziczą wszystkie swoje właściwości indeksowania (tak [ dim-indices ]):

is.matrix(tab) # returns TRUE 

Jeśli masz tabelę większą niż 2d, to w naturalny sposób odziedziczy ona funkcje dodatkowe z klasy tablicowej. Jedyną (typową) klasą, która używa "$" jako accessor, jest lista (z której dziedziczą ramka danych). Spróbuj:

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

(Przypuszczam, że nie powinien był tak kategoryczny o „$” Można uzyskać dostęp do elementów niektórych obiektów językowych i obiektów środowiskowych z tym akcesor, ponieważ zachowują się jak list.).

Powiązane problemy