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

如何移除含Undetermined值的自定义重复样本组?(R语言)

移除含Undetermined值的重复组数据筛选方案

问题背景

有一个包含10万+观测、38个变量的数据框,记录不同数据源同一样本的多组观测(共6个标记):

  • 重复组定义:data_source、sample_name和marker取值完全相同的行集合
  • 筛选需求:在end<10、status="good"、intensity!="Undetermined"的基础上,彻底移除所有组内存在intensity="Undetermined"的重复组(即只要组内有一行是Undetermined,整组所有行都删除)

示例数据:

df1 <- data.frame(data_source = c("1", "1", "1", "1", "1","1", "1" , "1", "1", "1", "1","1", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2", "2"),
                 sample_name = c("x1", "x1", "x1","x1", "x1", "x1", "x1", "x1", "x1", "x1", "x1", "x1", "x1", "x1", "x1","x1", "x1", "x1", "x1", "x1", "x1", "x1", "x1", "x1"),
                 marker = c("A", "B", "C","D", "E", "F", "A", "B", "C", "D", "E", "F", "A", "B", "C","D", "E", "F", "A", "B", "C", "D", "E", "F"),
                 intensity = c(9.74, 12.54, 15.32, 13.01, 15.83, 20.74, "Undetermined", 13.64, 15.13, 13.56, 15.72, 20.99, 13.63, 15.62, "Undetermined", 16.15, 20.15, 17.55, 13.14, 16.01, 10.52, 17.00, 19.89, 18.21),
                 end = c(9, 9, 9, 8, 8, 8, 9, 8, 8, 7, 9, 8, 9, 9, 9, 8, 8, 8, 9, 8, 8, 7, 9, 8),
                 status = c("good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good", "good"))

print(df1)

解决方案

方案1:Base R 原生实现(无需额外包)

通过分组标记+条件过滤完成,适合不想加载第三方包的场景:

# 给每个重复组标记是否存在Undetermined值
df1$bad_group <- ave(df1$intensity == "Undetermined",
                     df1$data_source, df1$sample_name, df1$marker,
                     FUN = any)

# 叠加所有筛选条件,过滤目标数据
df2 <- df1[df1$end < 10 & df1$status == "good" & df1$intensity != "Undetermined" & !df1$bad_group, ]

# 清理临时标记列
df2$bad_group <- NULL

方案2:dplyr 管道实现(简洁高效,适合大数据量)

用dplyr的分组处理逻辑,代码可读性更强,处理10万+行数据效率优异:

library(dplyr)

df2 <- df1 %>%
  # 按重复组定义分组,标记组内是否有Undetermined
  group_by(data_source, sample_name, marker) %>%
  mutate(bad_group = any(intensity == "Undetermined")) %>%
  ungroup() %>%
  # 应用所有筛选规则
  filter(end < 10,
         status == "good",
         intensity != "Undetermined",
         !bad_group) %>%
  # 删除临时标记列
  select(-bad_group)

说明

两种方案都能精准过滤掉所有包含Undetermined值的重复组,同时保留符合原有条件的有效数据。dplyr方案代码更简洁易维护,Base R方案无需依赖第三方包,可根据自身环境选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:32:20