基于键列合并两个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
相关产品推荐
相关产品推荐

