【发布时间】:2021-10-16 19:25:27
【问题描述】:
实际上它要复杂得多,但假设我的数据如下所示:
df <- data.frame(
id = c(1,1,1,2,2,2,2,3,3,3),
event = c(0,0,0,1,1,1,1,0,0,0),
day = c(1,3,3,1,6,6,7,1,4,6),
time = c("2016-10-25 14:00:00", "2016-10-27 12:00:15", "2016-10-27 15:30:00",
"2016-10-23 11:00:00", "2016-10-28 08:00:15", "2016-10-28 23:00:00", "2016-10-29 12:00:00",
"2016-10-24 15:00:00", "2016-10-27 15:00:15", "2016-10-29 16:00:00"))
df$time <- as.POSIXct(df$time)
Output:
id event day time
1 1 0 1 2016-10-25 14:00:00
2 1 0 3 2016-10-27 12:00:15
3 1 0 3 2016-10-27 15:30:00
4 2 1 1 2016-10-23 11:00:00
5 2 1 6 2016-10-28 08:00:15
6 2 1 6 2016-10-28 23:00:00
7 2 1 7 2016-10-29 12:00:00
8 3 0 1 2016-10-24 15:00:00
9 3 0 4 2016-10-27 15:00:15
10 3 0 6 2016-10-29 16:00:00
我需要做什么:
如果事件为 0,我只想保留每个 id 的最后 24 小时。 如果 event 是 1,我想保留第 6 天。
我知道如何保存过去的 24 小时:
library(lubridate)
last_twentyfour_hours <- df %>%
group_by(id) %>%
filter(time > last(time) - hours(24))
但是我如何为每个组进行不同的过滤呢?
非常感谢您!
【问题讨论】:
-
我对您的情况有疑问 -
24 hours规则是否适用于两个“事件”,然后您只希望子集用于“事件 1”,或者它是否像两个规则,即事件 0 -过去 24 小时,事件 1,全天 6? -
你的预期输出是什么?