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

使用dplyr结合lead/lag处理重复行并替换PeakType值

DataFrame重复行的PeakType补全与去重实现方案

针对你描述的场景——大型DataFrame中部分行因UnionChr、UnionStart、UnionEnd三列重复形成行组,组内一行PeakType为WT Specific/DKO Specific、另一行为N/A,需要保留含有效Intersect信息的行、补全其PeakType的N/A并移除重复行,以下是基于dplyr的实现代码:

方案一:基于组内有效值提取(更稳健)

test <- df %>% 
  # 按重复列分组
  group_by(UnionChr, UnionStart, UnionEnd) %>% 
  # 提取组内非NA的PeakType有效值
  mutate(group_valid_peak = first(na.omit(PeakType))) %>% 
  # 替换当前行PeakType的NA为组内有效值
  mutate(PeakType = ifelse(is.na(PeakType), group_valid_peak, PeakType)) %>% 
  # 筛选含有效Intersect信息的行(需根据实际定义调整,示例为Intersect非NA)
  filter(!is.na(Intersect)) %>% 
  # 移除临时辅助列
  select(-group_valid_peak) %>% 
  # 取消分组
  ungroup()

方案二:基于lead/lag函数(符合指定函数要求)

如果必须使用lead/lag处理行顺序不确定的重复行,可采用以下逻辑:

test <- df %>% 
  group_by(UnionChr, UnionStart, UnionEnd) %>% 
  # 根据前后行补全PeakType的NA
  mutate(PeakType = case_when(
    # 非NA值直接保留
    !is.na(PeakType) ~ PeakType,
    # 当前行NA,优先取后一行的有效值
    is.na(PeakType) & !is.na(lead(PeakType)) ~ lead(PeakType),
    # 当前行NA,取前一行的有效值
    is.na(PeakType) & !is.na(lag(PeakType)) ~ lag(PeakType),
    # 非重复行的NA保持原样
    TRUE ~ PeakType
  )) %>% 
  # 筛选含有效Intersect信息的行
  filter(!is.na(Intersect)) %>% 
  ungroup()

关键说明

  1. 分组逻辑:严格按UnionChr、UnionStart、UnionEnd分组,确保仅处理目标重复行组
  2. 补全逻辑:仅将重复行组内的PeakType NA替换为同组有效值,非重复行的NA不受影响
  3. 筛选条件:filter(!is.na(Intersect))需根据你对“有效Intersect信息”的实际定义调整(比如特定字符串、非空值等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:15:42