You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用full_join合并数据集时重复匹配问题求解

解决方法

常规的full_join会对每个匹配的ID做全量关联,所以df_2020中ID=112的两条记录都会和df_2021里的ID=112匹配,导致两条的code_2021都显示为23。要实现仅匹配其中一条、其余留空的效果,需要给重复ID添加分组内的序号,再基于ID+序号进行关联:

步骤1:给数据集添加分组序号

用dplyr工具包对每个ID分组后添加行号,区分同ID下的不同记录:

library(dplyr)

# 给df_2020添加分组序号
df_2020 <- df_2020 %>%
  group_by(ID) %>%
  mutate(row_num = row_number()) %>%
  ungroup()

# 给df_2021添加分组序号
df_2021 <- df_2021 %>%
  group_by(ID) %>%
  mutate(row_num = row_number()) %>%
  ungroup()

步骤2:基于ID和分组序号执行full_join

现在按ID和row_num两个字段关联,只有同ID且同序号的记录会匹配,其余记录的code_2021自然留空:

df_2020_2021 <- full_join(df_2020, df_2021, by = c("ID", "row_num"))

步骤3:移除分组序号列(可选)

如果不需要保留row_num字段,直接删掉即可:

df_2020_2021 <- df_2020_2021 %>%
  select(-row_num)

执行后就能得到你期望的结果:

IDcode_2020code_2021
1122323
11222NA
1112323
1102023
109NA23

内容的提问来源于stack exchange,提问作者S12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 18:25:35