【发布时间】:2015-06-09 15:10:22
【问题描述】:
我正在尝试生成观察结果的“情节”,将观察结果组合在一起</= 相隔 14 天。
使用 dplyr,我设法计算了自上次观察以来的天数。但是,我无法弄清楚如何在没有 for 循环的情况下根据条件 </= 14 获取新 id。
样本数据:
#obsvn is number of days since first observation in group
dat <- data.frame(id = c(rep("A",5), rep("B", 2)),
obsvn = c(1, 2, 29, 30, 45, 1, 15))
id obsvn
1 A 1
2 A 2
3 A 29
4 A 30
5 A 45
6 B 1
7 B 15
预期输出:
id obsvn ith
1 A 1 1
2 A 2 1
3 A 29 2
4 A 30 2
5 A 45 3
6 B 1 1
7 B 15 2
我尝试过使用延迟来
dat <- dat %>%
group_by(id) %>%
mutate(ith = 1,
ith = ifelse(obsvn - lag(obsvn) <= 14, lag(ith), lag(ith)+1))
dat
Source: local data frame [7 x 3]
Groups: id
id obsvn ith
1 A 1 NA
2 A 2 1
3 A 29 2
4 A 30 1
5 A 45 2
6 B 1 NA
7 B 15 1
这不是我想要的。我不明白为什么第 4 行中的 ith 是 1 而不是 2。
【问题讨论】: