R:如何在R中融合数据,其中行值成为列标签?

时间:2014-01-06 09:39:47

标签: r reshape melt

我有这个数据

   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

谢谢!

1 个答案:

答案 0 :(得分:3)

您需要melt您的数据,然后dcast。由于您没有针对每种组合的唯一值,因此当您拥有多个值时,您需要一些方法来保留所有值(如RES == 1VALUE == 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