我有一个宽格式的数据框,在不同的日期范围内进行重复测量。在我的示例中,存在三个不同的时期,都有相应的值。例如。第一次测量 (Value1
) 是在 DateRange1Start
到 DateRange1End
期间测量的:
ID DateRange1Start DateRange1End Value1 DateRange2Start DateRange2End Value2 DateRange3Start DateRange3End Value3
1 1/1/90 3/1/90 4.4 4/5/91 6/7/91 6.2 5/5/95 6/6/96 3.3
我希望将数据 reshape 为长格式,以便对 DateRangeXStart 和 DateRangeXEnd 列进行分组。因此,原始表中的 1 行在新表中变为 3 行:
ID DateRangeStart DateRangeEnd Value
1 1/1/90 3/1/90 4.4
1 4/5/91 6/7/91 6.2
1 5/5/95 6/6/96 3.3
我知道一定有办法用 reshape2
/melt
/recast
/tidyr
来做到这一点,但我似乎无法弄清楚如何以这种特定方式将多组度量变量映射到单组值列中。
最佳答案
reshape(dat, idvar="ID", direction="long",
varying=list(Start=c(2,5,8), End=c(3,6,9), Value=c(4,7,10)),
v.names = c("DateRangeStart", "DateRangeEnd", "Value") )
#-------------
ID time DateRangeStart DateRangeEnd Value
1.1 1 1 1/1/90 3/1/90 4.4
1.2 1 2 4/5/91 6/7/91 6.2
1.3 1 3 5/5/95 6/6/96 3.3
(根据 Josh 的建议添加了 v.names。)
关于将多组测量列(宽格式) reshape 为单列(长格式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466493/