2014-11-27 22 views
6

ich eine Frequenztabelle haben, die Häufigkeit der Elemente in einem Vektor zu zählenWie Werte in einer Frequenztabelle zuzugreifen

a = table(c(0,1,1,1,0,2,2,4,1,2,3,2,1,2,3,1,1,1,2,3,4,1,1,0)) 
a 
# 0 1 2 3 4 
# 3 10 6 3 2 

Ich weiß, dass ich den Namen von Namen zugreifen können (a). Aber wenn ich versuchte, auf die Werte der zweiten Zeile zuzugreifen

+1

ich vermeiden empfehlen dringend, würde mit ' Tabelle "zusammen und mit' dplyr': 'x%>% tally()'. Dies gibt eine Tabelle zurück, in der diese Art von Operationen einfach ist. – Hugh

Antwort

7

Diese Tabelle ist eigentlich ein Array.

x <- c(0,1,1,1,0,2,2,4,1,2,3,2,1,2,3,1,1,1,2,3,4,1,1,0) 
(a <- table(x)) 
# 
# 0 1 2 3 4 
# 3 10 6 3 2 
class(unclass(a)) 
# [1] "array" 

Die Namen sind oben und die Werte unten.

names(a) 
[1] "0" "1" "2" "3" "4" 

Sie können auf seine Elemente auf verschiedene Arten zugreifen.

a[1]      ## access named element by index 
# 0 
# 3 
a[[1]]     ## access unnamed element by index 
# [1] 3 
a["0"]     ## access named element by name 
# 0 
# 3 
a[["0"]]     ## access unnamed element by name 
# [1] 3 
as.vector(a)    ## as.vector() drops table down to unnamed vector 
# [1] 3 10 6 3 2 
c(a)[2:4]    ## c() drops table down to named vector 
# 1 2 3 
# 10 6 3 
class(a[2:4]) 
# [1] "array" 
class(c(a)[2:4]) 
# [1] "integer" 

Es hat auch ein nrow und dim Attribut, das in den letzten paar Zeilen table eingerichtet ist.

y <- array(tabulate(bin, pd), dims, dimnames = dn) 
class(y) <- "table" 

Obwohl es mir wirklich nicht klar, warum nrow(a) 5 ist aber a[1,] einen Fehler zurück.

+0

Ich wollte diese Erklärung setzen, aber wenn Sie 'nrow (a)' tun, erhalten Sie tatsächlich ein Ergebnis (obwohl nicht, was Sie denken würden). – A5C1D2H2I1M1N2O1R2T1

+0

Sogar "dim" funktioniert auf einem 'Tisch', während es nicht auf einem benannten Vektor ist .... Seltsam. – A5C1D2H2I1M1N2O1R2T1

+0

Sieht gut aus. Ich weiß nicht, wieso du 'c (a) [2: 4]' geschrieben hast - nur 'a [2: 4]' ergibt fast das gleiche Ergebnis, nur ohne Dimensionen. – thelatemail

4

Der Befehl table() gibt einen benannten Vektor zurück, keine Matrix oder data.frame. Wenn Sie die Anzahl der Nullen zugreifen möchten, würden Sie

a["0"] 

Hinweis tun, dass die numerischen Eigenschaften der Ebenen verloren gehen, weil die Namen der genannten Vektoren Zeichen lang sein. Sie können sie zurück mit as.numeric(names(a)) konvertieren, wenn Sie möchten

+0

Das ist richtig. Probiere a ['0'] == 3. Das wird Ihnen zeigen, dass die Namen der Vektoren 0,1,2,3,4 sind. – Jason

2

Die Tabelle, die Sie verwenden, ist ein eindimensionales Array und Sie verwenden 2 Dimensionen, um ein Element abzurufen, das wwhy Sie diesen Fehler erhalten.

Verwendung so etwas wie ein [1]

1

a = as.numeric (Name (a))

es werden Sie auf den ersten Spalte Zugriff

Verwandte Themen