varias superponer studio lineas graficos graficas r

superponer - Cómo convertir una tabla en un marco de datos



superponer graficas en r (4)

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 marco de datos 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:

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

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


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 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.


Si está utilizando el tidyverse , puede usar

as_data_frame(table(myvector))

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