R语言匹配两个数据框多列并为首个数据框新增列的实现问题
多字段非同名匹配新增列实现方案
Python(Pandas)实现
核心逻辑是用左连接保留df1全部行,指定两组不同名字段为匹配键,匹配后清理多余字段、填充未匹配值即可。
import pandas as pd # 执行左连接匹配 df1 = df1.merge( # 仅提取df2参与匹配和需要取值的列,避免产生多余无关列 df2[["First", "AgeNum", "BornPlace", "Weight"]], how="left", # 指定左右表对应匹配列 left_on=["Name", "Age", "Country"], right_on=["First", "AgeNum", "BornPlace"] ) # 删除df2带来的多余匹配列,未匹配到的Weight值填充为'-' df1 = df1.drop(columns=["First", "AgeNum", "BornPlace"]).fillna({"Weight": "-"})
R(dplyr)实现
用dplyr的left_join直接指定不同名列的匹配规则即可:
library(dplyr) df1 <- df1 %>% left_join( df2 %>% select(First, AgeNum, BornPlace, Weight), # 指定不同名匹配列的对应关系 by = c("Name" = "First", "Age" = "AgeNum", "Country" = "BornPlace") ) %>% # 未匹配到的空值替换为'-' mutate(Weight = coalesce(as.character(Weight), "-"))
注意事项
- 匹配前请确认两组匹配列的数据类型一致,比如
df1$Age为数值型、df2$AgeNum为字符串型会导致匹配失败,需提前统一类型 - 如果df2存在多个相同匹配键的行,左连接会生成重复行,可提前对df2按匹配键去重后再关联
内容的提问来源于stack exchange,提问作者mendokusai
相关产品推荐
相关产品推荐

