使用R合并数据框中Pathway列值相同的行并对其余单元格求和
实现方法
方法1:使用dplyr包(推荐,tidyverse生态常用)
# 加载依赖包,未安装可先运行 install.packages("dplyr") library(dplyr) # 构造原始测试数据,你可以直接替换为自己的df df <- structure(list(ACSK = c(1, 0, 0, 0, 0, 0, 0), AEUJ = c(0, 0, 0, 0, 0, 0, 0), AEXF = c(0, 0, 0, 0, 0, 0, 1), AIWT = c(1, 1, 0, 0, 0, 1, 0), ALGN = c(0, 0, 0, 1, 1, 1, 0), AMFQ = c(0, 1, 0, 0, 0, 0, 0), Pathway = c("Genome_integrity", "PI3K", "TF", "RTK_RAS", "PI3K", "Epigenetic_modifier", "PI3K")), row.names = c(NA, 7L), class = "data.frame") # 按Pathway分组,对所有数值列求和 df2 <- df %>% group_by(Pathway) %>% summarise(across(where(is.numeric), sum)) %>% ungroup() # 查看输出结果 print(df2)
方法2:Base R 原生实现(无需安装额外包)
# 按Pathway分组,其余列求和 df2 <- aggregate(. ~ Pathway, data = df, FUN = sum) # 调整列顺序和原始数据保持一致(可选操作) df2 <- df2[, c(setdiff(colnames(df2), "Pathway"), "Pathway")]
输出结果验证
运行上述代码得到的结果和你预期的完全一致:
ACSK AEUJ AEXF AIWT ALGN AMFQ Pathway 1 0 0 0 1 1 0 Epigenetic_modifier 2 1 0 0 1 0 0 Genome_integrity 3 0 0 1 1 1 1 PI3K 4 0 0 0 0 1 0 RTK_RAS 5 0 0 0 0 0 0 TF
如果需要行号按1到5顺排,直接运行rownames(df2) <- NULL即可。
内容的提问来源于stack exchange,提问作者Lin Caijin
相关产品推荐
相关产品推荐

