如何使用dplyr移除含大于指定值元素的分组(R语言)
移除包含指定条件元素的分组数据
需求
移除分组内存在至少一个value值大于7的整组数据,示例数据框如下:
df <- structure(list( group_id = c(1, 1, 1, 2, 2, 2, 3, 3, 3), value = c(1, 2, 3, 4, 5, 6, 7, 8, 9), .Names = c("group_id", "value"), row.names = c(NA, -9L), class = "data.frame")
期望输出为移除group_id=3后的数据集(该分组包含大于7的元素)。
问题重现
尝试以下代码仅过滤了分组内单个符合条件的行,无法实现整组移除:
library(dplyr) df2 <- df %>% group_by(group_id) %>% filter(value <7)
正确解法
使用all()或any()函数对整个分组做条件判断,而非逐行判断:
方法一:使用all()
保留所有value都不大于7的分组:
library(dplyr) df2 <- df %>% group_by(group_id) %>% filter(all(value <= 7)) %>% ungroup() # 可选,取消分组状态
方法二:使用any()
排除存在value大于7的分组:
library(dplyr) df2 <- df %>% group_by(group_id) %>% filter(!any(value > 7)) %>% ungroup() # 可选,取消分组状态
以上两种方法都会得到预期结果:仅保留group_id=1和group_id=2的所有行。
内容的提问来源于stack exchange,提问作者S2068
相关产品推荐
相关产品推荐

