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

R语言按df1样本匹配情况为ref数据框新增列并填充REF/ALT值

解决方案

你可以直接通过长表转宽表+缺失值替换实现,不需要手动新建空列填充NA,以下是两种实现方式:

方法一:从原始df1一步生成结果

library(dplyr)
library(tidyr)

# 原始数据框
df1 <- data.frame(
  sample_id = c('SB024', 'SB026', 'SB027', 'SB026', 'SB027'), 
  VAR = c('10g.76789732G>A','10g.76789732G>A','10g.76789732G>A','11g.102195430G>A','11g.102195430G>A'), 
  REF = c('G','G','G','C','C'),
  ALT = c('A','A','A','T','T'))

result <- df1 %>%
  # 去重保留所有VAR、REF、ALT、样本的对应关系
  distinct(VAR, REF, ALT, sample_id) %>%
  # 转换为宽表,存在匹配记录的位置填充ALT
  pivot_wider(names_from = sample_id, values_from = ALT) %>%
  # 所有无匹配的NA值替换为当前行的REF
  mutate(across(all_of(unique(df1$sample_id)), ~ifelse(is.na(.), REF, .)))

方法二:基于你已生成的ref对象继续处理

如果你已经提前生成好了ref数据框,可以直接批量遍历样本列赋值:

# 获取所有样本ID
samples <- unique(df1$sample_id)

result <- ref %>%
  # 逐列判断每个VAR是否在对应样本的匹配列表中
  mutate(across(all_of(samples), ~ifelse(VAR %in% df1$VAR[df1$sample_id == cur_column()], ALT, REF)))

运行后得到的result就是你需要的最终结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:36:04