如何用R语言通过ID部分匹配,用另一数据框填充目标数据框列
用R实现按ID匹配并保留全部行的填充方法
你需要的是左连接(Left Join),而不是merge()默认的内连接。下面是两种简单可行的方法:
方法一:基础R的merge()函数
给merge()加上all.x = TRUE参数,就能保留DF1的所有行,匹配上的填充对应值,没匹配上的自动留空(以NA形式呈现):
# 模拟示例数据 DF1 <- data.frame(ID = 1:200, Col1 = paste0("Val_", 1:200)) DF2 <- data.frame(ID = sample(1:200, 170), Col2 = paste0("Fill_", sample(1:200, 170))) # 左连接匹配,保留DF1所有行 result <- merge(DF1, DF2, by = "ID", all.x = TRUE)
方法二:dplyr包的left_join()函数
如果习惯tidyverse风格,left_join()逻辑更直观,默认就会保留第一个数据框的所有行:
library(dplyr) # 使用上述模拟数据执行左连接 result <- DF1 %>% left_join(DF2, by = "ID")
两种方法的结果一致:DF1里的所有ID都会被保留,能匹配到DF2的ID会填充对应列的值,匹配失败的位置显示NA(即你需要的空白状态)。
内容的提问来源于stack exchange,提问作者RobNewToR
相关产品推荐
相关产品推荐

