2013-11-21 8 views
7

Ich habe eine sehr einfache Datenmenge und ich habe versucht, Tabelle() in der ersten Spalte der Tabelle durchzuführen, aber R gibt eine Meldung mit der Überschrift zurück. Ich habe online gesucht, verstehe aber nicht ganz, warum das überhaupt passieren würde, da R meinen Tisch als Tisch akzeptiert ... könnte jemand raten?

Mein Ausgang erwarten:

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

aber es gibt:

> 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

Was ist 'class (tab)' und 'str (tab)'? – Thomas

+3

'V1' ist keine Spalte in der Tabelle, es ist nur eine Bezeichnung für die darunter liegenden Rownames. Die erste "Spalte" ist die unter "Cleveland". Es ist erreichbar über 'tab [, 1]' oder 'tab [, 'Cleveland']'. – joran

Antwort

6

Sie suchen

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

Das Objekt tab ist ein Objekt der Klasse Tabelle und nicht Unterstützung der $ Funktion.

Sie können auch die gewünschten Informationen aus dem tab Objekt erhalten mit

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

Sie über Tabellenobjekte als Matrizen, von denen denken sollten die 2D diejenigen alle Eigenschaften ihrer Indizierung (so [ dim-indices ]) erben:

is.matrix(tab) # returns TRUE 

Wenn Sie eine Tabelle größer als 2d haben, erbt es natürlich seine Accessor-Funktionen von der Array-Klasse. Die einzige (typische Daten) Klasse, die "$" als Accessor verwendet, ist eine Liste (von der Datenfelder erben). Versuchen:

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

(ich glaube, ich sollte nicht so etwa „$“ kategorisch gewesen Sie Elemente einiger Sprachobjekte und Umwelt Objekte mit dieser Accessor zugreifen können, da sie als Listen verhalten..)

Verwandte Themen