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

基于tidyverse对分组行进行条件筛选与重复行处理

问题:按分组规则清理R语言DataFrame重复行

原始数据

先定义待处理的DataFrame:

tst <- data.frame(dataset=as.factor(c(rep("DS1", 4), rep("DS2", 3), rep("DS3", 3))), 
           gene1=c("AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA", "AAA"),
           gene2=c("BBB", "BBB", "BBB", "BBB", "BBB", "BBB", "BBB", "BBB", "BBB", "BBB" ),
           confidence=c("high", "low", "medium", "high", "low", "low", "medium", "low", "high", "high"),
           dist_g1=c(1, 1, 3, 1, 0,0,0,6,6,0),
           dist_g2=c(0, 0, 0, 2, 0,0,0,4,4,12) )

处理规则

按dataset、gene1、gene2分组后,执行以下规则:

  • 若组内同一dist_g1和dist_g2组合对应不同confidence,保留置信度最高的行(优先级:high > medium > low)
  • 若组内dist_g1或dist_g2存在不同组合,保留所有不同的距离组合行

尝试过的代码(未满足需求)

tst %>% 
  mutate(confidence = factor(confidence, levels = c("low", "medium", "high"), ordered = TRUE)) %>%
  group_by(dataset, gene1, gene2) %>% 
  top_n(n=1, confidence)

上述代码仅按大分组取最高置信度行,未考虑同一距离组合内的去重逻辑,不符合需求。

正确的tidyverse实现方案

核心思路是先按**dataset、gene1、gene2、dist_g1、dist_g2**这五个字段分组,在每个子组内保留置信度最高的行,这样既满足规则1的同一距离组合去重,也自然保留了所有不同的距离组合(规则2)。

library(tidyverse)

tst_cleaned <- tst %>%
  # 将confidence转为有序因子,方便排序取最高值
  mutate(confidence = factor(confidence, levels = c("low", "medium", "high"), ordered = TRUE)) %>%
  # 按完整分组键(包含距离组合)分组
  group_by(dataset, gene1, gene2, dist_g1, dist_g2) %>%
  # 每个子组保留置信度最高的行;若有多个相同最高置信度,全部保留(可按需调整)
  filter(confidence == max(confidence)) %>%
  # 取消分组状态,返回普通DataFrame
  ungroup() %>%
  # 可选:将confidence转回字符型(如果不需要因子类型)
  mutate(confidence = as.character(confidence))

# 查看结果
print(tst_cleaned)

结果说明

运行后得到的tst_cleaned会:

  1. 对DS1中dist_g1=1, dist_g2=0的两行,保留confidence=high的行
  2. 保留DS1中dist_g1=3, dist_g2=0(medium)和dist_g1=1, dist_g2=2(high)的行
  3. DS2中dist_g1=0, dist_g2=0的多行保留最高置信度medium的行
  4. DS3中保留dist_g1=6, dist_g2=4(high)和dist_g1=0, dist_g2=12(high)的行

完全符合设定的两个处理规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:49:49