在R中按组计算均值并求与基线的差值(dplyr方案)
用dplyr高效计算多组均值及组间差值
针对以基因为行、多组重复列为结构的大数据框,以下是用dplyr实现需求的高效方案:
步骤1:准备环境与示例数据
先加载dplyr包,并用你提供的代码生成示例数据(设置随机种子保证结果可复现):
library(dplyr) set.seed(123) m <- matrix(runif(72, min = -10, max = 15), nrow = 8, ncol = 9) df <- as.data.frame(m, row.names = paste0('g', rep(1:8))) colnames(df) <- c(paste0("A_", rep(1:3)), paste0("B_", rep(1:3)), paste0("C_", rep(1:3)))
步骤2:计算每组均值并生成差值结果
利用across()批量选中目标列,结合向量化的rowMeans()计算行均值(比rowwise()效率更高,适合大规模数据),再以A组为基线计算差值:
res_tab <- df %>% # 计算各组的行均值 mutate( mean_A = rowMeans(across(starts_with("A_"))), mean_B = rowMeans(across(starts_with("B_"))), mean_C = rowMeans(across(starts_with("C_"))) ) %>% # 计算B、C组相对A组的差值 mutate( B = mean_B - mean_A, C = mean_C - mean_A ) %>% # 只保留需要的差值列,保留原行名 select(B, C)
结果说明
最终的res_tab结构完全符合需求:行名为原基因名,列是B组、C组相对A组的差值。可以通过print(res_tab)查看结果:
print(res_tab)
内容的提问来源于stack exchange,提问作者Jackie
相关产品推荐
相关产品推荐

