R语言基于两数据框参考列匹配为目标数据框新增ID列
R 数据框匹配追加ID列方案
核心处理要点
两个数据框直接匹配会失败,需要先做预处理:
NumID格式不统一:df中为5位带前导零的字符串,df2中为无前导零的短字符串,需先对齐格式- 需要从
df中提取每个ID对应首个日期的唯一映射关系,避免重复匹配
实现代码
library(lubridate) library(tidyverse) # 1. 从df中生成ID映射基准表 id_mapping <- df %>% mutate(date = as.Date(date)) %>% # 按NumID、ID分组,取每组最早的日期作为匹配依据 group_by(NumID, ID) %>% summarise(first_date = min(date), .groups = "drop") # 2. 清洗df2格式并关联匹配ID df2_with_id <- df2 %>% mutate( # 自动适配两种日期写法,统一转为标准Date类型 date = as.Date(date, tryFormats = c("%d-%m-%Y", "%Y-%m-%d")), # 给NumID补前导零到5位,和df的NumID格式对齐 NumID_std = str_pad(NumID, width = 5, side = "left", pad = "0") ) %>% # 关联映射表匹配对应ID left_join(id_mapping, by = c("NumID_std" = "NumID")) %>% # 保留和预期输出一致的字段 select(date, NumID, ID)
结果验证
运行后输出和预期完全一致:
date NumID ID 1 2011-01-01 1000 A 2 2011-01-02 2000 B 3 2011-01-03 3000 C
内容的提问来源于stack exchange,提问作者John Huang
相关产品推荐
相关产品推荐

