R语言批量计算药物与空白组蛋白表达差值均值的实现方法
R语言实现方案
方案1:tidyverse实现(推荐,适配大批量数据场景)
# 加载依赖包 library(tidyverse) # 1. 提取空白对照组数值 none_df <- df %>% filter(treatment == "none") %>% select(subjectID, protein, none_value = value) # 2. 批量计算差值并汇总得到目标格式 resdf <- df %>% filter(treatment != "none") %>% left_join(none_df, by = c("subjectID", "protein")) %>% mutate(diff = value - none_value) %>% group_by(protein, treatment) %>% summarise(mean_diff = mean(diff), .groups = "drop") %>% pivot_wider(names_from = treatment, values_from = mean_diff, names_glue = "{treatment}_mean_diff")
运行后输出的resdf完全匹配你需要的结果格式,不需要修改逻辑即可直接适配5名受试者、9种药物、100种蛋白的原始数据集。
方案2:base R实现(无需安装额外依赖包)
# 构建空白值索引向量 none_vals <- with(df[df$treatment == "none", ], setNames(value, paste(subjectID, protein, sep = "_"))) # 计算所有药物组的差值 drug_df <- df[df$treatment != "none", ] drug_df$diff <- drug_df$value - none_vals[paste(drug_df$subjectID, drug_df$protein, sep = "_")] # 分组求均值并转为宽格式 mean_df <- aggregate(diff ~ protein + treatment, data = drug_df, FUN = mean) resdf <- reshape(mean_df, idvar = "protein", timevar = "treatment", direction = "wide", sep = "_mean_diff") colnames(resdf) <- gsub("diff_", "", colnames(resdf))
内容的提问来源于stack exchange,提问作者rkm19
相关产品推荐
相关产品推荐

