基于共有ID合并含重复项数据框:dplyr left_join未达预期
问题分析与解决
首先重现你的数据框:
# 创建data1 data1 <- data.frame( "样本编号(Sample)" = c(1,2,3,4,5), "基因(Gene)" = c("gene_1", "gene_1", "gene_2", "gene_3", "gene_3"), stringsAsFactors = FALSE ) # 创建data2 data2 <- data.frame( "基因(Gene)" = c("gene_1", "gene_2", "gene_3"), "功能(Function)" = c("function_1", "function_2", "function_3"), "代谢通路(Metabolism)" = c("meta_1", "meta_2", "meta_3"), stringsAsFactors = FALSE )
你用left_join(data1, data2, by = "Gene")未得到正确结果,核心问题是合并列名不匹配:你的数据框实际列名是基因(Gene),而非Gene,left_join找不到匹配列,导致合并失败。
正确解决方法
方法1:使用实际列名直接合并
library(dplyr) output <- left_join(data1, data2, by = "基因(Gene)") print(output)
运行后得到期望输出:
| 样本编号(Sample) | 基因(Gene) | 功能(Function) | 代谢通路(Metabolism) |
|---|---|---|---|
| 1 | gene_1 | function_1 | meta_1 |
| 2 | gene_1 | function_1 | meta_1 |
| 3 | gene_2 | function_2 | meta_2 |
| 4 | gene_3 | function_3 | meta_3 |
| 5 | gene_3 | function_3 | meta_3 |
方法2:先重命名列名简化操作
如果觉得中文列名使用麻烦,可以先重命名列:
# 重命名列名 data1 <- data1 %>% rename(Sample = `样本编号(Sample)`, Gene = `基因(Gene)`) data2 <- data2 %>% rename(Gene = `基因(Gene)`, Function = `功能(Function)`, Metabolism = `代谢通路(Metabolism)`) # 执行合并 output <- left_join(data1, data2, by = "Gene")
内容的提问来源于stack exchange,提问作者Daniele
相关产品推荐
相关产品推荐

