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 № 1Vous 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