/ / R: Comment faire fondre des données dans R où les valeurs de ligne deviennent les étiquettes de colonne? - r, remodeler, fondre

R: Comment faire fondre des données dans R où les valeurs de ligne deviennent les étiquettes de colonne? - r, remodeler, fondre

J'ai ces données

   RES  RANK1   RANK2   RANK3   RANK4   RANK5
1   3   3   5   16  1
2   3   1   2   5   16
3   3   5   15  10  1

comment puis-je fondre les données de telle sorte que les valeurs de RANK1 à RANK5 deviennent la variable et de RANK1 à RANK5, la valeur.

Les données ont été rassemblées par: parmi la liste de (22) éléments, sélectionnez les 5 préférences les plus courantes.

Les nouvelles données seraient analysées comme si les réponses étaient multi-réponses.

la sortie attendue serait (eg.RES = 1)

RES 1      2      3        5       10       15     16
1   RANK5         RANK2    RANK3                   RANK4
2   RANK2  RANK3  RANK1    RANK4                   RANK5
3   RANK5         RANK1    RANK2   RANK4    RANK3

Merci!

Réponses:

3 pour la réponse № 1

Vous aurez besoin de melt vos données et ensuite dcast il. Comme vous n’avez pas de valeurs uniques pour chaque combinaison, vous avez besoin d’un moyen de conserver toutes les valeurs lorsque vous en avez plusieurs (comme cela se produit ici pour RES == 1 et VALUE == 3). Dans ce cas, nous concaténons simplement les valeurs à l'aide de paste avec un collapse argument:

dcast( melt( df , measure = 2:6 ) , RES ~ value , value.var = "variable" , fun = function(x) paste(x,collapse=";") , fill = ""   )
#  RES     1     2           3     5    10    15    16
#1   1 RANK5       RANK1;RANK2 RANK3             RANK4
#2   2 RANK2 RANK3       RANK1 RANK4             RANK5
#3   3 RANK5             RANK1 RANK2 RANK4 RANK3

L'effet de melt en utilisant le RANK* colonnes en tant que variables de mesure est de nous donner un long ensemble de données avec deux colonnes de variables id comme si

head( melt( df , measure = 2:6 ) )
#  RES variable value
#1   1    RANK1     3
#2   2    RANK1     3
#3   3    RANK1     3
#4   1    RANK2     3
#5   2    RANK2     1
#6   3    RANK2     5