gpt4 book ai didi

r - 根据子组 R 过滤数据

转载 作者:行者123 更新时间:2023-12-02 01:55:57 25 4
gpt4 key购买 nike

实际上它要复杂得多,但假设我的数据如下所示:

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 小时。如果事件为1,我想保留第6天。

我通常知道如何保留最后 24 小时:

library(lubridate)

last_twentyfour_hours <- df %>%
group_by(id) %>%
filter(time > last(time) - hours(24))

但是我如何对每个组进行不同的过滤?

提前非常感谢您!

最佳答案

按“id”、“event”分组,使用 if/else 进行过滤器,即 if 0 在“event”中,然后使用 OP 的条件或 else 返回“day”为 6 的行

library(dplyr)
library(lubridate)
df %>%
group_by(id, event) %>%
filter(if(0 %in% event) time > last(time) - hours(24) else
day == 6) %>%
ungroup

-输出

# A tibble: 5 × 4
id event day time
<dbl> <dbl> <dbl> <dttm>
1 1 0 3 2016-10-27 12:00:15
2 1 0 3 2016-10-27 15:30:00
3 2 1 6 2016-10-28 08:00:15
4 2 1 6 2016-10-28 23:00:00
5 3 0 6 2016-10-29 16:00:00

关于r - 根据子组 R 过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69598905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com