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

如何基于pos列分组处理行互补对并填充遗传数据缺失值?

遗传数据集缺失值填充方案(基于DNA互补规则)

需求说明

给定含重复基因组位置(pos列)的遗传数据集,需按pos分组完成以下操作:

  • 用组内非缺失单元格(非NN)填充缺失单元格
  • 若同组内两行的alleles不同,填充时需遵循DNA互补规则:
    • TT ↔ AA
    • GG ↔ CC

原始数据集

df <- data.frame(
  chr = c(1, 1, 2, 2),
  alleles = c("G/A", "C/T", "T/C", "T/C"),
  pos = c(13276, 13276, 56329, 56329),
  B_005 = c("GG", "CC", "TT", "NN"),
  B_087 = c("AA", "TT", "TT", "TT"),
  B_013 = c("GA", "NN", "TT", "TT"),
  B_140 = c("NN", "CC", "NN", "CC")
)

期望填充结果

df_filled <- data.frame(
  chr = c(1, 1, 2, 2),
  alleles = c("G/A", "C/T", "T/C", "T/C"),
  pos = c(13276, 13276, 56329, 56329),
  B_005 = c("GG", "CC", "TT", "TT"),
  B_087 = c("AA", "TT", "TT", "TT"),
  B_013 = c("GA", "CT", "TT", "TT"),
  B_140 = c("GG", "CC", "CC", "CC")
)

解决方案(R语言)

使用tidyverse工具链实现分组填充,核心逻辑是判断组内alleles是否为互补对,再决定填充方式:

library(tidyverse)

# 定义DNA单个碱基的互补映射表
complement_map <- c("A" = "T", "T" = "A", "G" = "C", "C" = "G")

# 自定义缺失值填充函数
fill_missing_vals <- function(col, alleles_in_group) {
  # 提取组内非缺失值
  non_missing <- col[col != "NN"]
  if (length(non_missing) == 0) return(col)
  
  # 拆分alleles为单个碱基,判断组内是否为互补allele对
  allele_split <- str_split(alleles_in_group, "/", simplify = TRUE)
  is_complementary_pair <- all(
    complement_map[allele_split[1,]] == allele_split[2,]
  )
  
  # 逐个处理单元格
  map_chr(col, function(cell) {
    if (cell != "NN") return(cell)
    
    if (is_complementary_pair) {
      # 对非缺失值的每个碱基取互补后拼接
      str_split(non_missing, "")[[1]] %>%
        map_chr(~complement_map[.x]) %>%
        paste(collapse = "")
    } else {
      # 直接复用非缺失值
      non_missing
    }
  })
}

# 按pos分组,对所有样本列应用填充逻辑
df_filled <- df %>%
  group_by(pos) %>%
  mutate(across(starts_with("B_"), ~fill_missing_vals(.x, alleles))) %>%
  ungroup()

# 查看填充结果
print(df_filled)

代码说明

  1. 互补映射表:定义单个碱基的互补关系,为序列转换提供基础
  2. 填充函数:
    • 先筛选组内非缺失值,若全缺失则直接返回原列
    • 拆分组内的alleles,判断是否为互补碱基对
    • 对缺失值(NN),根据是否为互补对选择直接复用非缺失值,或转换为互补序列后填充
  3. 分组处理:按pos分组,对所有样本列(B_开头)应用填充函数,最终得到目标数据集

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:10:17