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

如何按nest分组移除满足avg相等条件的Class_50行?

按分组条件过滤数据行

示例数据集

# Data set
nest <- c(2,2,2,2,2,2,3,3,3,3,3,3)
ClassType  <- c("Class_0_1","Class_1_3","Class_3_9","Class_9_25","Class_25_50",
"Class_50","Class_0_1","Class_1_3","Class_3_9","Class_9_25","Class_25_50","Class_50")
avg <- c(19.0,19.0,19.0,19.0,19.0,19.0,0.776,0.776,0.776,12.4,22.3,36.0)
ds <- data.frame(nest,ClassType,avg)

数据集结构:

str(ds)
# 'data.frame': 12 obs. of  3 variables:
#  $ nest     : num  2 2 2 2 2 2 3 3 3 3 ...
#  $ ClassType: chr  "Class_0_1" "Class_1_3" "Class_3_9" "Class_9_25" ...
#  $ avg      : num  19 19 19 19 19 19 0.776 0.776 0.776 12.4 ...

需求

按nest变量分组,若同组内ClassType为"Class_25_50"和"Class_50"的avg值相等,移除ClassType为"Class_50"的行。

实现方案

方案1:使用dplyr包(tidyverse生态)

先安装并加载dplyr:

install.packages("dplyr")
library(dplyr)

执行过滤逻辑:

filtered_ds <- ds %>%
  group_by(nest) %>%
  # 保留非Class_50的行,或Class_50但与同组Class_25_50的avg不等的行
  filter(!(ClassType == "Class_50" && avg == avg[ClassType == "Class_25_50"])) %>%
  ungroup()

# 查看结果
print(filtered_ds, row.names = TRUE)

方案2:使用Base R(无需额外安装包)

# 按nest拆分数据集,逐组处理后合并
filtered_ds <- do.call(rbind, lapply(split(ds, ds$nest), function(group) {
  # 提取两个目标类别的avg值
  val_25_50 <- group$avg[group$ClassType == "Class_25_50"]
  val_50 <- group$avg[group$ClassType == "Class_50"]
  
  # 若两个值存在且相等,移除Class_50的行
  if (length(val_25_50) > 0 && length(val_50) > 0 && val_25_50 == val_50) {
    group <- group[group$ClassType != "Class_50", ]
  }
  return(group)
}))

# 重置行名
row.names(filtered_ds) <- seq(nrow(filtered_ds))

# 查看结果
print(filtered_ds)

最终输出

#    nest   ClassType    avg
# 1     2   Class_0_1 19.000
# 2     2   Class_1_3 19.000
# 3     2   Class_3_9 19.000
# 4     2  Class_9_25 19.000
# 5     2 Class_25_50 19.000
# 6     3   Class_0_1  0.776
# 7     3   Class_1_3  0.776
# 8     3   Class_3_9  0.776
# 9     3  Class_9_25 12.400
# 10    3 Class_25_50 22.300
# 11    3    Class_50 36.000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:54:20