如何用dplyr筛选包含指定值的id对应的所有数据?
用dplyr实现按组筛选(组内任意值匹配则保留整组)
你可以通过dplyr的分组+筛选组合来实现需求,核心是用group_by()按id分组,再用any()判断组内是否存在符合条件的value,最后筛选出满足条件的组:
library(dplyr) # 示例数据 id <- c(1,1,1,1,1,2,2,2,2,2) value <- c(0,0,0,0,1,0,0,0,0,0) sample <- data.frame(id, value) # 执行筛选 result <- sample %>% group_by(id) %>% filter(any(value == 1)) %>% # 判断组内是否有任意value等于1 ungroup() # 取消分组(可选,根据后续操作需求) # 查看结果 print(result)
代码解释:
group_by(id):将数据按id字段分组,确保后续操作针对每个独立的id组执行filter(any(value == 1)):对每个分组,检查是否存在至少一个value等于1,满足该条件的分组会被完整保留所有行ungroup():如果后续不需要保持分组状态,用这个函数取消分组,恢复为普通数据框结构
如果需要适配任意匹配值x,只需把代码中的1替换为变量即可:
x <- 1 # 可替换为任意目标值 result <- sample %>% group_by(id) %>% filter(any(value == x)) %>% ungroup()
内容的提问来源于stack exchange,提问作者Ludwig Gershwin
相关产品推荐
相关产品推荐

