Mam tabelę w R, która ma str()
to:
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"
I wygląda to tak, kiedy go drukuję:
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
Chcę pozbyć się x
i y
i przekształcić ją w ramce danych, która wygląda dokładnie tak samo jak powyżej (trzech rzędach po cztery kolumny), ale bez x
lub y
. Jeśli używam as.data.frame(mytable)
, zamiast tego otrzymuję to:
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
Prawdopodobnie zasadniczo nie rozumiem, jak tabele odnoszą się do ramek danych.
?xtabs
(niekoniecznie jest to najbardziej oczywista lokalizacja).deparse.level = 0
(lub być może 2) wezwanie dotable
Odpowiedzi:
Już to rozgryzłem:
robi to, czego potrzebuję - najwyraźniej tabelę trzeba jakoś przekonwertować na matrycę, aby została odpowiednio przetłumaczona na ramkę danych. Znalazłem więcej szczegółów na temat tej funkcji as.data.frame.matrix () dla tabel awaryjnych na blogu Computational Ecology .
źródło
as.data.frame(mytable)
. (is.matrix(mytable)
ujawni, że tabele są po prostu upiększonymi macierzami ias.data.frame.matrix
jest metodą, która jest wysyłana poas.data.frame()
przekazaniu argumentu macierzy.)as.data.frame.table
jest wysyłany, a nie mniej konkretnyas.data.frame.matrix
.row.names
. Udało mi się dodać kolumnę za pomocąrow.names
wartości, ale raczej nie chcęas.data.frame.matrix
pisaćrow.names
w pierwszej kolejności ..as.data.frame.matrix(table(x))
daje miError in seq_len(ncols) : argument must be coercible to non-negative integer
, whileas.data.frame(table(x))
works, gdziex
jest tylko wektor numerycznyc(1,2,...)
Chociaż wyniki różnią się w tym przypadku, ponieważ nazwy kolumn są liczbami, inny sposób, którego użyłem, to
data.frame(rbind(mytable))
. Na przykładzie z @XX:Jeśli nazwy kolumn nie zaczynają się cyframi,
X
nie zostaną dodane na początku.źródło
Krótka odpowiedź: używanie
as.data.frame.matrix(mytable)
, jak zasugerował @Victor Van Hee.Długa odpowiedź:
as.data.frame(mytable)
może nie działać na tabelach awaryjnych generowanych przeztable()
funkcję, nawet jeśliis.matrix(your_table)
zwracaTRUE
. Nadal wtopi Cię w stółfactor1 factor2 factori counts
format.Przykład:
źródło
Jeśli używasz tidyverse , możesz użyć
aby uzyskać tibble (tj. ramkę danych z niewielkimi odchyleniami od klasy bazowej)
źródło
To jest bezwartościowe
as.data.frame (mytable)
Zamiast tego użyj tego
konwertować (mytable, to = "data.frame")
źródło
convert
nie jest częścią normalnego rozkładu R. Mam.could not find function "convert"
Jakiej biblioteki potrzebujesz do tego?