按组转置多列数据

时间:2013-06-12 19:51:01

标签: r

我有一个数据框:

df <- data.frame(month=rep(1:3,2), ID=rep(1:2,each=3),  
                 year=rep(2012,6),tmin=c(1:6),tmax=c(7:12))

我希望有一个数据框,如:

df1 <- data.frame(ID=rep(1:2,each=2), weather=rep(c("tmin","tmax"),2),
                  year=rep(2012,4), m1=c(1,7,4,10), m2=c(2,8,5,11),
                  m3=c(3,9,6,12))

在实际数据中有12个月的数千个数据,但基本上我希望按月列转换数据框,我尝试使用t和聚合,并且还搜索了一下,但没有成功,任何帮助都会感谢,谢谢。

1 个答案:

答案 0 :(得分:1)

是的, reshape2 是我的第一个想法:

library(reshape2)
dcast(melt(df,id.vars = 1:3),ID + variable + year ~ month,fun.aggregate = sum,value.var = "value")
  ID variable year  1  2  3
1  1     tmin 2012  1  2  3
2  1     tmax 2012  7  8  9
3  2     tmin 2012  4  5  6
4  2     tmax 2012 10 11 12

如果你愿意的话,唯一要做的就是重命名列。