Cómo convertir una tabla en un dataframe

Tengo una tabla en R que tiene str() de esto:

  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" 

Y se ve así cuando lo imprimo:

  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 

Quiero deshacerme de la y y convertirla en un dataframe que se ve exactamente igual al anterior (tres filas, cuatro columnas), pero sin la x ni la y . Si uso as.data.frame(mytable) , en su lugar obtengo esto:

  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 

Probablemente, fundamentalmente, no entiendo cómo se relacionan las tablas con los marcos de datos.

Ya lo descubrí:

 as.data.frame.matrix(mytable) 

hace lo que necesito, aparentemente, la tabla necesita convertirse de alguna manera en una matriz para poder traducirla adecuadamente a un dataframe. Encontré más detalles sobre esta función como .data.frame.matrix () para tablas de contingencia en el blog de Ecología Computacional .

Si bien los resultados varían en este caso porque los nombres de las columnas son números, otra forma que he utilizado es data.frame(rbind(mytable)) . Usando el ejemplo de @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 

Si los nombres de las columnas no comienzan con números, la X no se agregará al frente de ellos.

Respuesta corta: usando as.data.frame.matrix(mytable) , como lo sugirió @Victor Van Hee.

Respuesta larga: as.data.frame(mytable) puede no funcionar en las tablas de contingencia generadas por la función table() , incluso si is.matrix(your_table) devuelve TRUE . Todavía fundirá tu tabla en el factor1 factor2 factori counts .

Ejemplo:

 > 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 

Si está utilizando el tidyverse , puede usar

 as_data_frame(table(myvector)) 

obtener un tibble (es decir, un dataframe con algunas variaciones menores de la clase base)