在R中合并GMT文件第三列起的可变数量列为逗号分隔格式
处理GMT数据合并可变列基因的R方案
基础R实现
先读取GMT文件(注意加fill=TRUE自动补全空列的NA),然后逐行合并第三列及以后的基因列,忽略空值:
# 读取GMT数据,header设为FALSE因为GMT没有表头,fill=TRUE处理行长度不一的情况 gmt_data <- read.delim("你的文件路径.gmt", header = FALSE, sep = "\t", fill = TRUE) # 动态选取第三列到最后一列,逐行合并为逗号分隔的字符串,自动忽略NA gmt_data$合并基因列 <- apply(gmt_data[, 3:ncol(gmt_data)], 1, function(row) { paste(na.omit(row), collapse = ",") }) # 保留前两列(通路名、来源链接)和新的合并列 最终结果 <- gmt_data[, c(1, 2, "合并基因列")]
tidyverse实现
如果习惯用tidyverse工具链,可以通过宽表转长表再分组合并的方式处理:
library(tidyverse) # 读取GMT数据 gmt_data <- read_delim("你的文件路径.gmt", delim = "\t", col_names = FALSE, show_col_types = FALSE) # 把第三列及以后的所有列转成单行基因,过滤空值后分组合并 最终结果 <- gmt_data %>% pivot_longer(cols = starts_with("X3"):last_col(), names_to = NULL, values_to = "基因") %>% filter(!is.na(基因)) %>% group_by(X1, X2) %>% summarise(合并基因列 = str_c(基因, collapse = ","), .groups = "drop")
两种方法都能适配每行基因列数不固定的情况,处理后就能得到你想要的三列结构:通路名称、来源链接、逗号分隔的基因列表。
内容的提问来源于stack exchange,提问作者tacrolimus
相关产品推荐
相关产品推荐

