如何筛选符合特定条件的行及其上一行?(R语言dplyr场景)
分组筛选时保留符合条件行及其上一行的R语言实现
你当前的代码已经能按ID_number分组筛选出time_diff_hour > 8或该字段为NA的行,要同时保留这些符合条件行的上一行,可以通过添加标记列的方式实现:
修改后的代码
data2 <- data2 %>% group_by(ID_number) %>% # 标记需要保留的行:自身符合条件,或下一行符合条件(即当前行是符合条件行的上一行) mutate(keep_row = (time_diff_hour > 8 | is.na(time_diff_hour)) | lead(time_diff_hour > 8 | is.na(time_diff_hour), default = FALSE)) %>% filter(keep_row) %>% # 移除临时标记列 select(-keep_row) %>% ungroup()
代码说明
lead()函数用于获取同组内下一行的筛选判断结果,default = FALSE确保组内最后一行没有下一行时,不会返回NA,而是判定为不需要保留keep_row列会标记两种行:一是本身满足原筛选条件的行,二是下一行满足原筛选条件的行(也就是目标行的上一行)- 最后筛选出标记为
TRUE的行,并清理临时生成的标记列
内容的提问来源于stack exchange,提问作者Asma
相关产品推荐
相关产品推荐

