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 deshacerse de la x
e y
y la convierten en una trama de datos que se ve exactamente igual que el anterior (tres filas, cuatro columnas), pero sin la x
o y
. Si uso as.data.frame(mytable)
, en cambio 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 no entiendo fundamentalmente cómo se relacionan las tablas con los marcos de datos.
?xtabs
(no es necesariamente la ubicación más obvia).deparse.level = 0
(o posiblemente 2) en la llamada atable
Respuestas:
Ya lo descubrí:
hace lo que necesito: aparentemente, la tabla debe convertirse de alguna manera en una matriz para traducirla adecuadamente en un marco de datos. Encontré más detalles sobre esta función as.data.frame.matrix () para tablas de contingencia en el blog Computational Ecology .
fuente
as.data.frame(mytable)
. (is.matrix(mytable)
revelará que las tablas realmente son solo matrices disfrazadas, yas.data.frame.matrix
es el método que se despacha cuandoas.data.frame()
se pasa un argumento de matriz.)as.data.frame.table
que se está enviando, en lugar de ser menos específicoas.data.frame.matrix
.row.names
. He logrado agregar una columna usando losrow.names
valores, pero prefiero evitaras.data.frame.matrix
escribirrow.names
en primer lugar ...as.data.frame.matrix(table(x))
me daError in seq_len(ncols) : argument must be coercible to non-negative integer
, mientrasas.data.frame(table(x))
trabaja, dondex
solo hay un vector numéricoc(1,2,...)
Si bien los resultados varían en este caso porque los nombres de las columnas son números, otra forma que he usado es
data.frame(rbind(mytable))
. Usando el ejemplo de @XX:Si los nombres de las columnas no comienzan con números,
X
no se agregarán al frente de ellos.fuente
Respuesta corta: usando
as.data.frame.matrix(mytable)
, como sugirió @Victor Van Hee.Respuesta larga:
as.data.frame(mytable)
puede que no funcione en tablas de contingencia generadas portable()
función, incluso si seis.matrix(your_table)
devuelveTRUE
. Seguirá derritiendo su tabla en elfactor1 factor2 factori counts
formato.Ejemplo:
fuente
Si está usando el tidyverse , puede usar
para obtener un tibble (es decir, un marco de datos con algunas variaciones menores de la clase base)
fuente
Esto es depricate
as.data.frame (mytable)
En su lugar use esto
biblioteca ("quanteda")
convertir (mytable, to = "data.frame")
fuente
convert
no es parte de la distribución normal de R. Tengocould not find function "convert"
¿Qué biblioteca necesitas para esto?