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

多列ID匹配两个data.frame:关联生成匹配标题列

解决方案

可以用tidyverse工具包实现需求,核心思路是先将两个数据集的ID列转换为便于匹配的集合形式,再逐行匹配并汇总标题:

步骤1:加载依赖包

library(tidyverse)

步骤2:预处理DF2,提取每行的有效ID集合

把DF2每行的ID列(ID1_2、ID2_2、ID3_2)整理成无NA的ID集合,保留对应的Title:

df2_processed <- DF2 %>%
  rowwise() %>%
  mutate(ids = list(na.omit(c(ID1_2, ID2_2, ID3_2)))) %>%
  ungroup() %>%
  select(ids, Title)

步骤3:预处理DF1,提取每行的有效ID集合

同样处理DF1,生成每行的ID集合:

df1_processed <- DF1 %>%
  rowwise() %>%
  mutate(ids = list(na.omit(c(ID1, ID2, ID3)))) %>%
  ungroup()

步骤4:匹配标题并汇总

对DF1的每行ID集合,找到DF2中所有ID集合有交集的Title,用逗号拼接;如果没有匹配结果则设为NA:

DF3 <- df1_processed %>%
  rowwise() %>%
  mutate(
    Match_titles = if (length(ids) == 0) {
      NA_character_
    } else {
      df2_processed %>%
        filter(map_lgl(ids, ~ any(.x %in% ids))) %>%
        pull(Title) %>%
        paste(collapse = ", ")
    }
  ) %>%
  ungroup() %>%
  select(-ids)

验证结果

运行上述代码后,输出的DF3与示例一致:

> DF3
# A tibble: 3 × 4
    ID1   ID2   ID3 Match_titles        
  <dbl> <dbl> <dbl> <chr>               
1     1     4     9 Journal Z, Journal Y
2     2     5    NA Journal X, Journal X
3     3    NA    NA NA                  

说明

  • 该方法通过rowwise()逐行处理数据,适合中小型数据集;如果是超大型数据集,可考虑用向量化操作或data.table优化性能。
  • 匹配逻辑是只要DF1某行的任意一个ID出现在DF2某行的ID集合中,就将对应的Title纳入结果,符合需求中“每个ID对应多个标题、每个标题关联多个ID”的场景。

内容的提问来源于stack exchange,提问作者T. C. Nobel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:27:25