所以我有一个一般结构如下的数据框:
数据框:
rownum |
group |
date |
1 |
a |
2021-05-01 |
2 |
a |
2021-05-02 |
3 |
a |
2021-05-03 |
4 |
b |
2021-05-15 |
5 |
b |
2021-05-17 |
6 |
b |
2021-05-30 |
7 |
b |
2021-05-31 |
8 |
b |
2021-05-31 |
9 |
c |
2021-05-01 |
10 |
c |
2021-05-05 |
我想做的是,在组内,将第一行与下一行进行比较,直到日期之间的差异达到某个阈值,例如 10 天。然后,一旦该行满足阈值,我想根据后续行测试下一行。它看起来像这样:
结果,使用阈值 10:
|rownum|group |date |date diff|
|------|------|-----------|---|
|1 | a |2021-05-01 |NA|
|2 | a |2021-05-02 |1|
|3 | a |2021-05-03 |2|
|4 | b |2021-05-15 |NA|
|5 | b |2021-05-17 |2|
|6 | b |2021-05-30 |15 (meets criteria, start from row 7 now)|
|7 | b |2021-05-31 | NA|
|8 | b |2021-05-31 | 0|
|9 | c |2021-05-01 | NA|
|10 | c |2021-05-05 | 4|
因此,重申一下,它将一组的第一行与后续行进行比较,直到满足某个阈值。然后从组内的第一个代表处开始计数,直到组内的后续行。差异记录为 datediff。
我已经尝试过,但我不知道供应是否可行:
dataframe %>%
group_by(group) %>%
mutate(
datediff = sapply(date, function(x) {
all(difftime(dataframe$date,dplyr::lag(dataframe, n = 1, default = NA)))
}
)
)
也尝试过这个,我认为这更接近我想要的:
for (m in 1:length(dataframe)) {
dataframe <- dataframe %>%
group_by(group) %>%
rowwise() %>%
mutate(datediff = difftime(dataframe$date,dplyr::lag(date, n = m, default = NA), units="days"))
}
到目前为止,我还无法获得正确的行比较来实现阈值位。