R语言如何匹配同一基因有多条记录的两个数据集
解决方案
你之前的两种方法不符合预期的原因:
- 默认
merge是内连接,仅保留两个表共有的匹配项,所以会丢失set2中没有对应记录的NLRP2、ANK1 match仅返回第一个匹配项的索引,无法展开同一个symbol对应的多条通路记录
方法1:基础R实现
只需给merge指定左连接参数即可,同时关闭默认排序保留set1的原有顺序:
result <- merge(set1, set2, by = "symbol", all.x = TRUE, sort = FALSE) # 调整列顺序和你预期输出一致(将gene列放在最前) result <- result[, c("gene", "bM", "fold", "value", "symbol", "geneID", "pathway", "pathwayID")]
方法2:dplyr实现(语法更直观)
用left_join直接实现左连接,自动保留左表所有行、匹配右表所有对应记录:
library(dplyr) result <- left_join(set1, set2, by = "symbol")
两种方法得到的结果和你给出的预期输出完全一致:匹配到多通路的基因会自动展开为多行,无匹配的基因对应通路相关字段自动填充NA。
内容的提问来源于stack exchange,提问作者user3224522
相关产品推荐
相关产品推荐

