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 veux me débarrasser du x
et y
et le convertir en un bloc de données qui ressemble exactement à ce qui précède (trois lignes, quatre colonnes), mais sans le x
ou y
. Si j'utilise as.data.frame(mytable)
, à la place j'obtiens 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 cadres de données.
?xtabs
(ce n'est pas nécessairement l'emplacement le plus évident.)deparse.level = 0
(ou éventuellement 2) dans l'appel àtable
Réponses:
Je l'ai déjà compris:
fait ce dont j'ai besoin - apparemment, la table doit d'une manière ou d'une autre être convertie en matrice pour être correctement traduite en un bloc de données. J'ai trouvé plus de détails sur cette fonction as.data.frame.matrix () pour les tables de contingence sur le blog Computational Ecology .
la source
as.data.frame(mytable)
. (is.matrix(mytable)
révélera que les tables ne sont en réalité que des matrices habillées, etas.data.frame.matrix
c'est la méthode qui est envoyée quandas.data.frame()
un argument de matrice est passé.)as.data.frame.table
qui est envoyé, plutôt que le moins spécifiqueas.data.frame.matrix
.row.names
. J'ai réussi à ajouter une colonne en utilisant lesrow.names
valeurs, mais j'évite plutôt d'as.data.frame.matrix
écrirerow.names
en premier lieu ..as.data.frame.matrix(table(x))
me donneError in seq_len(ncols) : argument must be coercible to non-negative integer
, tout enas.data.frame(table(x))
fonctionnant, oùx
est juste un vecteur numériquec(1,2,...)
Bien que les résultats varient dans ce cas parce que les noms de colonnes sont des nombres, une autre manière que j'ai utilisée est
data.frame(rbind(mytable))
. En utilisant l'exemple de @XX:Si les noms de colonnes ne commencent pas par des nombres,
X
ils ne seront pas ajoutés au début .la source
Réponse courte: utilisation
as.data.frame.matrix(mytable)
, comme @Victor Van Hee l'a suggéré.Réponse longue:
as.data.frame(mytable)
peut ne pas fonctionner sur les tables de contingence générées par latable()
fonction, même siis.matrix(your_table)
retourneTRUE
. Il fera toujours fondre votre table dans lefactor1 factor2 factori counts
format.Exemple:
la source
Si vous utilisez le tidyverse , vous pouvez utiliser
pour obtenir un tibble (c'est-à-dire une trame de données avec quelques variations mineures par rapport à la classe de base)
la source
C'est déprécier
as.data.frame (ma table)
Utilisez plutôt ceci
bibliothèque ("quanteda")
convert (ma table, en = "data.frame")
la source
convert
ne fait pas partie de la distribution R normale. J'ai decould not find function "convert"
quelle bibliothèque avez-vous besoin pour cela?