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

R语言中基于ID分组Score列条件过滤数据框的方法

解决R数据框按组过滤的问题

没问题,这需求很常见,我给你两种实用的解决方案,分别适用于tidyverse用户和base R用户:

首先先把你的示例数据框完整写出来,方便直接测试:

dat <- structure(list(
  ID = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 3L),
  Score = structure(c(1L, 1L, 2L, 3L, 2L, 2L, 2L, 3L, 3L, 1L), 
                    .Label = c("A", "B", "C"), class = "factor"),
  Info = c(1L, 10L, 7L, 8L, 9L, 1L, 7L, 8L, 3L, 2L)
), class = "data.frame")

方法1:使用dplyr(tidyverse风格,推荐)

这种写法逻辑清晰,可读性强,是日常数据处理的常用方式:

library(dplyr)

filtered_dat <- dat %>%
  group_by(ID) %>%  # 按ID分组
  filter(any(Score == "A")) %>%  # 只保留组内至少有一个"A"的分组
  ungroup()  # 取消分组,恢复普通数据框结构

方法2:使用base R(无需额外包)

如果不想加载第三方包,用base R也能轻松实现:

# 第一步:找出所有包含"A"的有效ID
valid_ids <- unique(dat$ID[dat$Score == "A"])

# 第二步:过滤数据框,只保留有效ID对应的行
filtered_dat <- dat[dat$ID %in% valid_ids, ]

两种方法得到的结果一致:过滤后的数据框会保留ID=1和ID=3的所有行,而ID=2的行因为没有"A"会被全部删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:10:55