r - 使用 tidyr 收集多个日期/值列

标签 r reshape tidyr

我有一个数据集,其中包含(除其他外)多个带有日期和相应值(重复测量)的列。有没有办法把它变成一个长数据集,只包含(其他和)两列 - 一列用于日期,一列用于值 - 使用 tidyr ?

以下代码生成一个示例数据框:

df <- data.frame(
   id = 1:10,
   age = sample(100, 10),
   date1 = as.Date('2015-09-22') - sample(100, 10),
   value1 = sample(100, 10),
   date2 = as.Date('2015-09-22') - sample(100, 10),
   value2 = sample(100, 10),
   date3 = as.Date('2015-09-22') - sample(100, 10),
   value3 = sample(100, 10))

输入表可能(在 1 中出现 1.8x10^138 的机会)如下所示:
   id age      date1 value1      date2 value2      date3 value3
1   1  32 2015-08-01     37 2015-07-15     38 2015-09-09     81
2   2  33 2015-07-22     16 2015-06-26      1 2015-09-12     58
...
10 10  64 2015-07-23     78 2015-08-25     70 2015-08-05     90

我最终想要的是这个:
   id age       date  value
1   1  32 2015-08-01     37
2   1  32 2015-07-15     38
3   1  32 2015-09-09     81
4   2  33 2015-07-22     16
5   2  33 2015-06-26      1
...
30 10  64 2015-08-05     90

任何帮助在 tidyr 中执行此操作或 reshape将不胜感激。

最佳答案

应该有一些有效的方法,但这是一种方法。

分别为日期和值工作,

#for date
df.date<-df%>%select(id, age,date1,date2, date3)%>%melt(id.var=c("id", "age"), value.name="date")
#for val
df.val<-df%>%select(id, age,value1,value2, value3)%>%melt(id.var=c("id", "age"), value.name="value")

现在加入,
df2<-full_join(df.date, df.val, by=c("id", "age"))
df2%>%select(-variable.x, -variable.y)

 id age       date value
1   1  40 2015-07-19    28
2   1  40 2015-07-19    49
3   1  40 2015-07-19    24
4   2  33 2015-06-27    99
5   2  33 2015-06-27    18
6   2  33 2015-06-27    26
7   3  75 2015-07-07    63
8   3  75 2015-07-07    74
9   3  75 2015-07-07    72

关于r - 使用 tidyr 收集多个日期/值列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32732728/

相关文章:

r - 'show' 是正常的 S4 通用函数吗?

r - 如何将多行的 R 数据框重新格式化为一行

r - 融化多组 measure.vars

R:使用棘手的分隔符将列分成行

r - 从右到左计算 1 的个数,到第一个 0 为止

r - 使用 R 进行分区和排列

R tidyr : use separate function to separate character column with comma-separated text into multiple columns using RegEx

r - 将 data.frame 转换为单行

r - 使用 dplyr 枚举 data.frame 中的冗余值

r - 混合 unnest_longer 和 unnest_wider