【发布时间】:2018-07-10 15:26:53
【问题描述】:
我的数据看起来像这样:
data_t <- data.frame(identfiant = paste0('ID_', 1:5),
date = c('2018-02-06', '2018-05-14', '2018-03-23', '2018-04-10', '2018-03-03'),
ndays = c(4,2,3,5,2))
导致:
identfiant date ndays
1 ID_1 2018-02-06 4
2 ID_2 2018-05-14 2
3 ID_3 2018-03-23 3
4 ID_4 2018-04-10 5
5 ID_5 2018-03-03 2
我想创建一个如下所示的新表:
identfiant date ndays y
1 ID_1 2018-02-06 4 2018-02-07
2 ID_1 2018-02-06 4 2018-02-08
3 ID_1 2018-02-06 4 2018-02-09
4 ID_1 2018-02-06 4 2018-02-10
5 ID_2 2018-05-14 2 2018-05-15
6 ID_2 2018-05-14 2 2018-05-16
7 ID_3 2018-03-23 3 2018-03-24
8 ID_3 2018-03-23 3 2018-03-25
9 ID_3 2018-03-23 3 2018-03-26
10 ID_4 2018-04-10 5 2018-04-11
11 ID_4 2018-04-10 5 2018-04-12
12 ID_4 2018-04-10 5 2018-04-13
13 ID_4 2018-04-10 5 2018-04-14
14 ID_4 2018-04-10 5 2018-04-15
15 ID_5 2018-03-03 2 2018-03-04
16 ID_5 2018-03-03 2 2018-03-05
如我们所见,每行初始行都重复了ndays 次,而新列y 由date + 1:ndays 组成。
是否有任何优雅的方法可以使用 dplyr 或 data.table 来做到这一点。
我绝对不想使用for 循环(对于大量数据来说太长)和seq_along。
我想首先创建一个列,将每一行的所有可能值粘贴在一起,这样我们就可以在第一行使用 y = '2018-02-07;2018-02-08;2018-02-09;2018-02-10',然后执行 reshape(dcast) 或 separate_rows。
我的代码如下所示:
data_t2 <- data_t %>%
mutate(
y = paste0(as.Date(date)+1:ndays, collapse = ";")
) %>%
separate_row(y, sep = ";\\s+")
问题在于,对于 R,data_t$date 是一个向量,并且由于它不会单独处理每一行,因此它会通过一次处理向量 data_t$date 来创建一个新向量 y,并且不会不知道要引用data_t$ndays 的哪个值。我们会遇到向量长度一致性问题。
有人有想法吗?
提前致谢
【问题讨论】:
标签: r