R dplyr按id分组筛选满足a=1行数≥2且a有多个取值的组
原有代码缺少对「分组内a列等于1的行数」的判断逻辑,同时添加了冗余的行级筛选条件,才会导致不符合要求的id=1分组被保留。
你可以直接用以下代码实现需求:
library(dplyr) dat1 <- dat %>% group_by(id) %>% # 两个条件直接对应你的需求,同时满足才会保留整个分组 filter( sum(a == 1) >= 2, # 分组内a=1的行数至少为2 n_distinct(a) >= 2 # 分组内a的不同取值至少有2种 ) %>% ungroup() # 后续不需要分组操作的话可主动取消分组
代码逻辑说明:
sum(a == 1) >= 2:按id分组后,统计每个分组内a列取值为1的行数,仅保留满足≥2要求的分组n_distinct(a) >= 2:统计每个分组内a列的唯一值数量,仅保留满足≥2要求的分组
运行上述代码输出的结果和你给出的期望结果完全一致。
内容的提问来源于stack exchange,提问作者berehan
相关产品推荐
相关产品推荐

