如何基于flag列值过滤数据框,保留所有flag为0的ID对应行?
解决方案:过滤所有flag均为0的ID对应的行
样本数据
首先定义你的数据集:
sample <- data.frame( ID = c(100,100,101,101,102,102,103,103), flag = c(0,0,1,1,0,1,0,0) )
原始数据展示:
ID flag 1 100 0 2 100 0 3 101 1 4 101 1 5 102 0 6 102 1 7 103 0 8 103 0
方法1:Base R 实现
可以通过两种方式完成筛选:
分步写法
# 找出存在flag=1的ID,取反得到所有flag均为0的ID invalid_ids <- unique(sample$ID[sample$flag == 1]) valid_ids <- setdiff(sample$ID, invalid_ids) # 筛选符合条件的行 result <- sample[sample$ID %in% valid_ids, ]
简洁写法(用ave函数)
result <- sample[ave(sample$flag, sample$ID, FUN = function(x) all(x == 0)) == 1, ]
方法2:dplyr 包实现
如果习惯tidyverse语法,分组后筛选逻辑更直观:
library(dplyr) result <- sample %>% group_by(ID) %>% filter(all(flag == 0)) %>% ungroup()
最终结果
运行上述代码后,得到的结果为:
ID flag 1 100 0 2 100 0 7 103 0 8 103 0
内容的提问来源于stack exchange,提问作者SteveMcManaman
相关产品推荐
相关产品推荐

