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

在R数据集中多条件筛选:移除section a得分≥section b的分组

问题描述

给定以下R数据集:

dataset = data.frame(group = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3),
                     date = c(120123, 120123, 120123, 120123, 120123, 120123, 
                              120123, 120123, 120123, 120123, 120123, 120123, 
                              120123, 120123, 120123),
                     section = c("a", "b", "c", "d", "e", "a", "b", "c", "d", 
                                 "e", "a", "b", "c", "d", "e"), 
                     score = c(0, 3, 0, 0, 0, 3, 3, 2, 2, 3, 0, 3, 1, 2, 0))

需要过滤掉所有分组中section="a"的score大于等于section="b"的score的分组,保留剩余分组的全部行,预期结果如下:

date group section score
1 120123     1       a     0
2 120123     1       b     3
3 120123     1       c     0
4 120123     1       d     0
5 120123     1       e     0
6 120123     3       a     0
7 120123     3       b     3
8 120123     3       c     1
9 120123     3       d     2
10 120123     3       e     0

解决方案

方法一:使用dplyr包(代码直观易读)

先确保安装并加载dplyr:

# 未安装则先执行
# install.packages("dplyr")
library(dplyr)

filtered_data <- dataset %>%
  group_by(group) %>%
  # 筛选出当前分组中a的score小于b的score的组
  filter(score[section == "a"] < score[section == "b"]) %>%
  ungroup()

print(filtered_data)

方法二:基础R实现(无需依赖第三方包)

# 提取每个分组下a和b的score值
group_scores <- tapply(dataset$score, list(dataset$group, dataset$section), function(x) x[1])
# 筛选出符合条件的分组
valid_groups <- rownames(group_scores)[group_scores[,"a"] < group_scores[,"b"]]
# 过滤原始数据集
filtered_data <- dataset[dataset$group %in% valid_groups, ]

print(filtered_data)

两种方法均可得到预期的过滤结果,dplyr写法更简洁,适合常规数据处理场景;基础R方法无需额外包,适合轻量需求场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:05:23