R语言合并含重复匹配键的两个data.frame的问题
R数据框多列匹配合并保留全量左表行方案
问题根因
你当前调用的merge.data.frame默认执行内连接(inner join),仅会保留两个表中匹配键完全重合的行,因此仅返回了匹配成功的33行结果,不符合保留大表全量行的需求。
实现方法
你需要执行左连接(left join),逻辑为保留左表(大表MatrixAuxiliar2)的全部行,对每一行的匹配键,自动关联补充小表MatrixAuxiliar1中对应ker系列字段的内容,无匹配的行对应ker字段填充为NA。
方法1:基础包merge实现
仅需在原有代码基础上添加all.x = TRUE参数即可:
merge.data.frame(MatrixAuxiliar2, MatrixAuxiliar1, by = c(1,2,3), all.x = TRUE)
方法2:dplyr包left_join实现(代码可读性更高)
# 加载dplyr包 library(dplyr) # 执行左连接,按列名匹配更稳妥,避免列位置变动导致匹配错误 result <- left_join(MatrixAuxiliar2, MatrixAuxiliar1, by = c("position", "direction[1]", "direction[2]"))
注意事项
合并前建议校验两个表匹配键的数据类型是否一致,例如position列如果一个为数值型、一个为字符型,会导致匹配失败出现大量NA,提前统一数据类型可避免该类问题。
内容的提问来源于stack exchange,提问作者SophieGermain
相关产品推荐
相关产品推荐

