R:重塑长到

时间:2015-12-08 05:04:49

标签: r dataframe reshape reshape2

我有一个宽大的数据框,看起来像这样:

    ID Time Amount     CabMean CabNum     PartMean PartNum     DinnMean   DinNum  Ex
1    1    1    27  0.654621546      8           NA       7  0.316791872        6   0
2    1    2    82  0.667461321      3  0.327594876       4  0.346798127        2   1
3    1    3    52  0.313976132      1           NA       6  0.197837257        7   0
4    1    4    99  0.798328712      9  0.913751678       4  0.191679538        9   1

我想重塑(使用reshape2包)它采用这种形式的长格式(只是将这些数字提升):

  ID Time Amount Ex Type   Mean         Num
1  1    2    50   0  Cab   0.65654321   7
2  1    2    50   0 Part   0.65654321   1
3  1    2    50   0 Dinn   0.65654321   4

我尝试过这样的事情:

reshaped <- melt(data, id.vars = c("ID", "Time", "Amount", "Ex"))

这让我这样:

  ID Time Amount Ex  variable    value
1  1    1    10   0  CabMean 0.6565432
2  1    2    12   0  CabMean 0.6565432

所以我只有一半在那里,并不能完全弄明白其余的。我如何(从我当前使用的代码或全新代码中)提取类型(Cab,Part,Dinn)作为单独的列,并创建另外两个包含Mean和Num值的列?

1 个答案:

答案 0 :(得分:2)

我们可以使用melt中的data.tablemeasure可以使用pattern个参数。我们转换了&#39; data.frame&#39;到&#39; data.table&#39; (setDT(data)),然后melt到&#39;长&#39;格式。

library(data.table)
DT <- melt(setDT(data), measure=patterns('Mean$', 'Num$'), 
              variable.name='Type', value.name=c('Mean', 'Num'))
DT[, Type:=c('Cab', 'Part', 'Dinn')[Type]]