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.
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 marco de datos. Encontré más detalles sobre esta función como .data.frame.matrix () para tablas de contingencia en el blog de Ecología Computacional .