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

按组筛选:移除不包含指定字符串集合的组内所有行

问题描述

现有如下R数据:

individual <- 1:10
group <- c("A", "A", "B", "B", "B", "C", "C", "D", "D", "D")
colour <- c("Red", "Blue", "Red", "Red", "Red", "Red", "Blue", "Red", "Red", "Blue")
df <- data.frame(individual, group, colour)

数据包含组别(A、B、C等),每个组由不同数量的个体组成,每个个体对应不同颜色。需求是移除所属组未包含指定颜色集合的所有行。例如指定必需颜色集合:

required_list <- c("Red", "Blue")

示例中组别B仅包含Red,未同时覆盖Red和Blue,因此需移除组别B的所有行,期望输出如下:

individual2 <- c(1,2,6,7,8,9,10)
group2 <- c("A", "A", "C", "C", "D", "D", "D")
colour2 <- c("Red", "Blue", "Red", "Blue", "Red", "Red", "Blue")
df2 <- data.frame(individual2, group2, colour2)

Base R 实现

无需额外包,通过分组校验+筛选实现:

# 定义必需颜色集合
required_list <- c("Red", "Blue")

# 按组校验是否包含所有必需颜色,筛选出有效组
group_check <- tapply(df$colour, df$group, function(x) all(required_list %in% x))
valid_groups <- names(group_check)[group_check]

# 保留有效组的所有行
df2 <- df[df$group %in% valid_groups, ]

dplyr/tidyverse 实现

利用分组过滤逻辑,代码更简洁直观:

library(dplyr)

required_list <- c("Red", "Blue")

df2 <- df %>%
  group_by(group) %>%
  filter(all(required_list %in% colour)) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 15:04:49