Remodeler la troisième colonne du bloc de données de la matrice (“long” à “large” format)
J'ai un data.frame
qui ressemble à ceci.
x a 1
x b 2
x c 3
y a 3
y b 3
y c 2
Ce que je veux c'sous forme de matrice afin que je puisse le donner à heatmap faire un terrain. Le résultat devrait ressembler à quelque chose comme:
a b c
x 1 2 3
y 3 3 2
J'ai essayé cast
de le remodeler paquet et j'ai essayé d'écrire un manuel de fonction pour le faire, mais je ne semble pas être en mesure d'obtenir ce droit.
- a également une grande réponse à ce sujet ici: stackoverflow.com/a/14515736/210673
Vous devez vous connecter pour publier un commentaire.
Il y a beaucoup de façons de le faire. Cette réponse commence par mes façons préférées, mais aussi la collecte de diverses manières à partir de réponses à des questions similaires dispersés autour de ce site.
À l'aide de la tidyverse:
La fraîcheur de la nouvelle façon de faire, c'est avec
spread
de tidyr. Elle renvoie une trame de données, ce qui est probablement ce que la plupart des lecteurs de cette réponse le souhaitez. Pour une heatmap, cependant, vous devez convertir ce pour une matrice réelle.À l'aide de reshape2:
L'une des premières étapes vers la tidyverse était le reshape2 paquet. J'ai toujours pense que pour beaucoup de remodelage des tâches, la
melt
et*cast
fonctions sont plus propres et plus simple que la tidyverse façons.Pour obtenir une matrice d'utilisation
acast
:Ou pour obtenir un bloc de données, l'utilisation
dcast
, comme ici: Remodeler les données pour les valeurs dans une colonne.À l'aide de plyr:
Entre reshape2 et la tidyverse est venu
plyr
, avec ladaply
fonction, comme illustré ici: https://stackoverflow.com/a/7020101/210673En utilisant la matrice d'indexation:
C'est un peu vieille école, mais c'est une belle démonstration d'indexation de matrice, qui peut être très utile dans certaines situations.
À l'aide de
xtabs
:À l'aide d'une matrice creuse:
Il y a aussi
sparseMatrix
dans leMatrix
paquet, comme on le voit ici: R - convertir GRANDE table dans la matrice sont les noms des colonnesÀ l'aide de
reshape
:Vous pouvez également utiliser la base de la fonction R
reshape
, comme suggéré ici: Convertir un tableau en sont les noms des colonnes de la matrice, si vous avez à faire un peu de manipulation par la suite, de supprimer une des colonnes supplémentaires et d'obtenir les noms de droit (non représenté).acast(tmp, x~y, value.var="z")
donnera une matrice de sortie, avecx
de la ligne.les noms deLa question est de quelques années, mais peut-être que certaines personnes sont toujours intéressés par les réponses alternatives.
Si vous ne voulez pas charger tous les packages, vous pouvez utiliser cette fonction:
Comment cela fonctionne:
de la base de R,
unstack
Cela peut ne pas être une solution générale, mais fonctionne bien dans ce cas.
de données
Un souci d'exhaustivité, il y a un
tapply()
solution autour de.Données
La tidyr package à partir de la tidyverse a une excellente fonction qui fait cela.
En supposant que les variables sont nommées v1, v2 et v3, de gauche à droite, et vous trame de données est nommée dat:
Ta da!