1

我有这个数据

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

我如何融化数据,使 RANK1 到 RANK5 的值成为变量,而 RANK1 到 RANK5 成为值。

数据是通过以下方式收集的:在 (22) 个项目列表中,选择前 5 个偏好。

将分析新数据,就好像答案是多响应一样。

预期输出将是(例如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

谢谢!

4

1 回答 1

3

您将需要melt您的数据,然后dcast是它。因为您没有每个组合的唯一值,所以当您拥有多个值时,您需要某种方法来保留所有值(就像这里的RES == 1and一样VALUE == 3)。在这种情况下,我们只需使用参数连接pastecollapse

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     

melt使用列作为度量变量的效果RANK*是为我们提供了一个长数据集,其中包含两列 id 变量,如下所示

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
于 2014-01-06T09:53:19.210 回答