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

基于键列合并两个DataFrame的最佳方法及结果匹配问题

嘿,我来帮你搞定这个DataFrame合并的问题~

首先看你给出的两个DataFrame,它们的id列是完全一一对应的(都是1到5),所以其实用最基础的内连接就能得到你想要的结果,甚至不需要额外加all相关的参数。

先把创建两个DataFrame的代码再明确一下:

df1 <- data.frame(id = c(1,2,3,4,5), quant = c(23,4,34,52,22))
df2 <- data.frame(tshape = c(43,3,5,1,6), id = c(1,2,3,4,5))

然后执行合并,只需要指定连接键是id就行,默认就是内连接:

dfall <- merge(df1, df2, by = "id")

运行这段代码后,得到的结果就是你期望的样子:

id quant tshape
1  1    23     43
2  2     4      3
3  3    34      5
4  4    52      1
5  5    22      6

为什么你之前的尝试没得到预期结果?

其实你之前用的all = TRUE、all.x = TRUE、all.y = TRUE在这个场景下,理论上输出结果应该和上面的内连接完全一致——因为两个DataFrame的id没有缺失或不匹配的情况,不管是全连接、左连接还是右连接,最终都会保留所有行且没有NA值。可能是你操作时的小疏漏,比如有没有重新运行创建df1和df2的代码?或者查看结果时不小心看错了?

顺便给你理清一下merge参数的区别,方便以后用:

  • merge(..., by = "id"):默认内连接,只保留两个DataFrame中id都存在的行,适合连接键完全匹配的场景。
  • merge(..., by = "id", all = TRUE):全连接,保留两个DataFrame中所有的id,缺失的列会填充NA。
  • merge(..., by = "id", all.x = TRUE):左连接,保留左表(df1)的所有id,右表(df2)中没有匹配的行对应列填NA。
  • merge(..., by = "id", all.y = TRUE):右连接,保留右表(df2)的所有id,左表(df1)中没有匹配的行对应列填NA。

内容的提问来源于stack exchange,提问作者Elr Mant

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:52:28