You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效筛选出在x列同时包含var1和var2的grp分组?

筛选同时包含指定值的分组(dplyr简洁实现)

需求:从数据框中筛选出grp分组,要求每个分组的x列同时包含"var1"和"var2",替代原有用paste拼接字符串后判断的繁琐方法。

基础数据

library(dplyr)
library(tibble)

dat <- tibble(
  x = c("var1", "var2", "var1"),
  grp = c("grp1", "grp1", "grp2")
)

简洁实现方法

方法1:检查分组是否包含全部目标值

直接在分组内通过all()和%in%判断目标值集合是否完全存在于当前分组的x列中:

# 保留符合条件的所有行
dat_filtered <- dat %>%
  group_by(grp) %>%
  filter(all(c("var1", "var2") %in% x)) %>%
  ungroup()

dat_filtered$grp
#> [1] "grp1" "grp1"

如果只需要提取唯一的分组名称,可以结合distinct()和pull():

# 获取唯一符合条件的分组名
valid_groups <- dat %>%
  group_by(grp) %>%
  filter(all(c("var1", "var2") %in% x)) %>%
  distinct(grp) %>%
  pull(grp)

valid_groups
#> [1] "grp1"

方法2:基于计数的判断(适用于目标值无重复的场景)

如果每个分组内的x值不会重复,也可以通过计数目标值的数量来判断:

dat %>%
  group_by(grp) %>%
  filter(sum(x %in% c("var1", "var2")) == 2) %>%
  ungroup()

说明

上述方法无需拼接字符串,逻辑更直观,代码更简洁,同时能避免因分组内x值顺序不同导致的判断错误(比如原方法中如果分组内x的顺序是"var2, var1"就会被误判)。

内容的提问来源于stack exchange,提问作者boshek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 22:25:41