R语言跨数据框条件匹配值替换与未匹配样本批量追加实现
R 实现qPCR复孔统计与样本汇总通用方案
前置数据结构约定
以下方案基于常见的仪器输出数据结构设计,你可以根据自己的实际列名修改对应参数:
- Data 列名:
sample_name(样本名)、well(孔位编号,如A1、B3)、cq_value(单孔检测输出值) - Replicates 列名:
well_list(复孔组孔位拼接字符串,默认逗号分隔,如"A1,A2")、Mean.Cq(复孔均值)、STD.Cq(复孔标准差)
实现代码
首先安装依赖包(已安装可跳过):
install.packages("tidyverse")
加载包并执行处理:
library(tidyverse) # 1. 处理复孔数据,匹配对应样本名 Replicates_with_sample <- Replicates %>% # 拆分孔位列表为单个孔位,一行对应一个孔位 separate_rows(well_list, sep = ",") %>% # 匹配Data里的样本名 left_join(Data, by = c("well_list" = "well")) %>% # 按复孔组的统计值分组(如有复孔组唯一ID,替换为ID列更准确) group_by(Mean.Cq, STD.Cq) %>% # 取第一个样本名作为该复孔组的样本名 summarise(sample_name = first(sample_name), .groups = "drop") %>% # 调整列顺序和后续单孔样本格式对齐 select(sample_name, Mean.Cq, STD.Cq) # 2. 提取所有属于复孔组的孔位,用于筛选非复孔样本 replicate_wells <- Replicates %>% separate_rows(well_list, sep = ",") %>% pull(well_list) # 3. 处理非复孔样本,生成对应统计值 single_well_samples <- Data %>% # 筛选不在复孔组里的孔位 filter(!well %in% replicate_wells) %>% # 单孔样本均值为自身检测值,标准差可按需设为0或NA mutate(Mean.Cq = cq_value, STD.Cq = 0) %>% # 选择和复孔处理结果一致的列 select(sample_name, Mean.Cq, STD.Cq) # 4. 合并两类样本得到最终汇总表 final_summary <- bind_rows(Replicates_with_sample, single_well_samples)
适配修改说明
- 如果你的孔位分隔符不是逗号,把
separate_rows里的sep参数改成对应的分隔符,比如空格就写sep = " " - 如果Replicates有额外的唯一标识复孔组的列(比如复孔组ID),可以把
summarise前的group_by参数替换成对应的ID列,匹配准确度更高 - 如果非复孔样本的标准差你希望设为NA而非0,把
STD.Cq = 0改成STD.Cq = NA_real_
内容的提问来源于stack exchange,提问作者allisonrs
相关产品推荐
相关产品推荐

