R语言如何按子组不同规则对数据集执行条件筛选
实现方案
因为每个id对应的event值是唯一的,所以直接按id分组后,在filter中根据组内的event值判断采用对应筛选规则即可,无需拆分数据集再合并,代码更简洁。
首先加载依赖包:
library(dplyr) library(lubridate)
筛选代码如下:
result <- df %>% group_by(id) %>% filter( if (first(event) == 0) { # event为0时保留组内最近24小时数据 time > last(time) - hours(24) } else { # event为1时保留day等于6的数据 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
如果你的实际场景中同个id存在多个event值的情况,将筛选条件替换为下面的写法即可适配:
filter((event == 0 & time > last(time) - hours(24)) | (event == 1 & day == 6))
内容的提问来源于stack exchange,提问作者Katharina
相关产品推荐
相关产品推荐

