Come convertire una tabella in un frame di dati

Ho una tabella in R che ha str() di questo:

  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" 

E assomiglia a questo quando lo stampo:

  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 

Voglio sbarazzarmi di y e convertirlo in un frame di dati che sembra esattamente lo stesso di sopra (tre righe, quattro colonne), ma senza x o y . Se uso as.data.frame(mytable) , invece ottengo questo:

  xy Freq 1 Metro >=1 million q1 0.1663567 2 Metro =1 million q2 0.2612212 5 Metro =1 million q3 0.2670441 8 Metro =1 million q4 0.3053781 11 Metro <1 million q4 0.1986102 12 Non-Metro Counties q4 0.1263597 

Probabilmente fondamentalmente non capisco come le tabelle si riferiscono ai frame di dati.

L’ho già capito:

 as.data.frame.matrix(mytable) 

fa quello che mi serve – apparentemente, la tabella ha bisogno di essere convertita in qualche modo in una matrice per essere opportunamente tradotta in un frame di dati. Ho trovato maggiori dettagli su questa funzione as.data.frame.matrix () per le tabelle di contingenza nel blog Computational Ecology .

Mentre i risultati variano in questo caso perché i nomi delle colonne sono numeri, un altro modo che ho usato è data.frame(rbind(mytable)) . Utilizzando l’esempio di @XX:

 > freq_t = table(cyl = mtcars$cyl, gear = mtcars$gear) > freq_t gear cyl 3 4 5 4 1 8 2 6 2 4 1 8 12 0 2 > data.frame(rbind(freq_t)) X3 X4 X5 4 1 8 2 6 2 4 1 8 12 0 2 

Se i nomi delle colonne non iniziano con i numeri, la X non verrà aggiunta in primo piano.

Risposta breve: usando as.data.frame.matrix(mytable) , come suggerito da @ Victor Van Hee.

Risposta lunga: as.data.frame(mytable) potrebbe non funzionare sulle tabelle di contingenza generate dalla funzione table() , anche se is.matrix(your_table) restituisce TRUE . Ti farà ancora sciogliere la tabella nel factor1 factor2 factori counts .

Esempio:

 > freq_t = table(cyl = mtcars$cyl, gear = mtcars$gear) > freq_t gear cyl 3 4 5 4 1 8 2 6 2 4 1 8 12 0 2 > is.matrix(freq_t) [1] TRUE > as.data.frame(freq_t) cyl gear Freq 1 4 3 1 2 6 3 2 3 8 3 12 4 4 4 8 5 6 4 4 6 8 4 0 7 4 5 2 8 6 5 1 9 8 5 2 > as.data.frame.matrix(freq_t) 3 4 5 4 1 8 2 6 2 4 1 8 12 0 2 

Se stai usando il tidyverse , puoi usare

 as_data_frame(table(myvector)) 

per ottenere un tibble (cioè un frame di dati con alcune variazioni minori dalla class base)