将多组测量列(宽格式) reshape 为单列(长格式)

标签 r reshape tidyr reshape2 r-faq

我有一个宽格式的数据框,在不同的日期范围内进行重复测量。在我的示例中,存在三个不同的时期,都有相应的值。例如。第一次测量 (Value1) 是在 DateRange1StartDateRange1End 期间测量的:

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/

相关文章:

r - 将数据拆分为命名向量

r - 如何修改公式的左边?

r - 在 ggplot2 注释中使用 "*"或 "|"符号

python - 将 2D np.array 中的 int 值替换为 3 个值的列表,使其成为 3D

r - 根据组的第一个值填充每组的 NA 值

r - 找到向量中最近值的最快方法

r - 将 data.frame 转换为单行

matlab - 使用不同的起始/结束元素数 reshape 行

r - 用每月序列填充 NA

r - 收集多组列