Ich habe eine Tabelle in R, die davon hat str()
:
table [1:3, 1:4] 0.166 0.319 0.457 0.261 0.248 ...
- attr(*, "dimnames")=List of 2
..$ x: chr [1:3] "Metro >=1 million" "Metro <1 million" "Non-Metro Counties"
..$ y: chr [1:4] "q1" "q2" "q3" "q4"
Und sieht beim Drucken so aus:
y
x q1 q2 q3 q4
Metro >=1 million 0.1663567 0.2612212 0.2670441 0.3053781
Metro <1 million 0.3192857 0.2480012 0.2341030 0.1986102
Non-Metro Counties 0.4570341 0.2044960 0.2121102 0.1263597
Ich möchte das x
und loswerden y
und es in einen Datenrahmen konvertieren, der genauso aussieht wie oben (drei Zeilen, vier Spalten), aber ohne das x
oder y
. Wenn ich benutze as.data.frame(mytable)
, bekomme ich stattdessen folgendes:
x y Freq
1 Metro >=1 million q1 0.1663567
2 Metro <1 million q1 0.3192857
3 Non-Metro Counties q1 0.4570341
4 Metro >=1 million q2 0.2612212
5 Metro <1 million q2 0.2480012
6 Non-Metro Counties q2 0.2044960
7 Metro >=1 million q3 0.2670441
8 Metro <1 million q3 0.2341030
9 Non-Metro Counties q3 0.2121102
10 Metro >=1 million q4 0.3053781
11 Metro <1 million q4 0.1986102
12 Non-Metro Counties q4 0.1263597
Ich verstehe wahrscheinlich grundsätzlich nicht, wie sich Tabellen auf Datenrahmen beziehen.
?xtabs
(nicht das ist unbedingt der offensichtlichste Ort.)deparse.level = 0
(oder möglicherweise 2) in dem Anruf antable
Antworten:
Ich habe es schon herausgefunden:
macht was ich brauche - anscheinend muss die Tabelle irgendwie in eine Matrix konvertiert werden, um angemessen in einen Datenrahmen übersetzt zu werden. Weitere Details zu dieser Funktion as.data.frame.matrix () für Kontingenztabellen habe ich im Blog Computational Ecology gefunden .
quelle
as.data.frame(mytable)
. (is.matrix(mytable)
wird zeigen, dass Tabellen wirklich nur verkleidete Matrizen sind, undas.data.frame.matrix
ist die Methode, dieas.data.frame()
as.data.frame.table
dass es tatsächlich versendet wird und nicht an dem weniger spezifischenas.data.frame.matrix
.row.names
. Ich habe es geschafft, eine Spalte mit denrow.names
Werten hinzuzufügen , aber ich vermeide eher dasas.data.frame.matrix
Schreibenrow.names
an erster Stelle.as.data.frame.matrix(table(x))
gibt mirError in seq_len(ncols) : argument must be coercible to non-negative integer
während deras.data.frame(table(x))
Arbeit, wox
nur ein numerischer Vektor istc(1,2,...)
Während die Ergebnisse in diesem Fall variieren, weil die Spaltennamen Zahlen sind, habe ich sie auch verwendet
data.frame(rbind(mytable))
. Verwenden Sie das Beispiel von @XX:Wenn die Spaltennamen nicht mit Zahlen beginnen,
X
werden diese nicht an der Vorderseite hinzugefügt.quelle
Kurze Antwort: Verwenden
as.data.frame.matrix(mytable)
, wie von @Victor Van Hee vorgeschlagen.Lange Antwort: Funktioniert
as.data.frame(mytable)
möglicherweise nicht mit von dertable()
Funktion generierten Kontingenztabellen , selbst wenn sieis.matrix(your_table)
zurückgegeben werdenTRUE
. Es wird immer noch Ihre Tabelle in dasfactor1 factor2 factori counts
Format schmelzen .Beispiel:
quelle
Wenn Sie die Tidyverse verwenden , können Sie verwenden
um ein Tibble zu erhalten (dh einen Datenrahmen mit einigen geringfügigen Abweichungen von der Basisklasse)
quelle
Das ist beraubt
as.data.frame (mytable)
Verwenden Sie stattdessen dies
convert (mytable, to = "data.frame")
quelle
convert
ist nicht Teil der normalen R-Verteilung. Ich habecould not find function "convert"
Welche Bibliothek brauchst du dafür?