通过多个分组重塑长到宽

时间:2013-12-16 20:43:07

标签: r reshape reshape2

我的数据如下:

  Smoker PtNo Day Hour FEV1 timename
1       0    1   1    0 3.26     d1h0
2       0    1   1    2 3.05     d1h2
3       0    1   1    4 3.02     d1h4
4       0    1   1    6 3.27     d1h6
5       0    1   2    0 3.28     d2h0
6       0    1   2    2 3.07     d2h2
7       0    1   2    4 3.35     d2h4
8       0    1   2    6 3.07     d2h6
9       0    1   3    0 3.28     d3h0
10      0    1   3    2 3.44     d3h2

我想将其重塑为如下的宽格式:

PtNo  Smoker  FEV1.d1h0  FEV1.d1h2  FEV1d1.h3   etc.

其中PtNo和Smoker以及独立变量不随时间变化,而FEV1是测量的时变变量。我使用reshape包中的meltdcast / reshape2函数收到各种错误消息。有什么建议? (请定制对新手级别的响应。)

2 个答案:

答案 0 :(得分:3)

你在找这个吗?

reshape(dat,direction='wide',
        idvar=c('Smoker','PtNo'),
        v.names='FEV1',
        timevar='timename',
        drop=c('Day','Hour'))

 Smoker PtNo FEV1.d1h0 FEV1.d1h2 FEV1.d1h4 FEV1.d1h6 FEV1.d2h0 FEV1.d2h2 FEV1.d2h4 FEV1.d2h6 FEV1.d3h0 FEV1.d3h2
1      0    1      3.26      3.05      3.02      3.27      3.28      3.07      3.35      3.07      3.28      3.44

答案 1 :(得分:1)

> dcast(df, PtNo + Smoker ~ timename, value.var="FEV1")
 PtNo Smoker   d1h0 d1h2 d1h4 d1h6 d2h0 d2h2 d2h4 d2h6 d3h0 d3h2
1   1      0   3.26 3.05 3.02 3.27 3.28 3.07 3.35 3.07 3.28 3.44

如果您希望列名与您拥有的完全相同,那么您paste之前只能timename“FEV1”到dcastdcast来自包reshape2