J'ai une table dans R qui a str()
de ceci:
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"
Et ça ressemble à ça quand je l’imprime:
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
Je souhaite supprimer les variables x
et y
et les convertir en un cadre de données identique à celui ci-dessus (trois lignes, quatre colonnes), mais sans la variable x
ou y
. Si j'utilise as.data.frame(mytable)
, j'obtiens plutôt ceci:
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
Je ne comprends probablement pas fondamentalement comment les tableaux se rapportent aux blocs de données.
Je l'ai déjà compris:
as.data.frame.matrix(mytable)
fait ce dont j'ai besoin - apparemment, la table doit être convertie en une matrice pour pouvoir être traduite correctement en un cadre de données. J'ai trouvé plus de détails sur ce fonction as.data.frame.matrix () pour les tables de contingence sur le blog Computational Ecology .
Bien que les résultats varient dans ce cas car les noms des colonnes sont des nombres, j’utilise aussi data.frame(rbind(mytable))
. En utilisant l'exemple de @ X.X:
> 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 les noms de colonne ne commencent pas par des chiffres, la X
ne sera pas ajoutée à leur tête.
Réponse courte: en utilisant as.data.frame.matrix(mytable)
, comme l'a suggéré @Victor Van Hee.
Réponse longue: as.data.frame(mytable)
risque de ne pas fonctionner avec les tables de contingence générées par la fonction table()
, même si is.matrix(your_table)
renvoie TRUE
. Cela fera toujours fondre votre table au format factor1 factor2 factori counts
.
Exemple:
> 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