You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于共有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)
1gene_1function_1meta_1
2gene_1function_1meta_1
3gene_2function_2meta_2
4gene_3function_3meta_3
5gene_3function_3meta_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:25:30