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

如何在R中基于字符串包含关系关联两个数据集?

无模糊匹配关联格式混乱数据集的可行方案

方法一:基于字符串包含的直接关联

核心思路是先生成两个数据集的所有可能组合,再筛选出dataset1$exporter_group包含在dataset2$company中的记录,同时保留所有需要的字段(包括dataset2的company列用于人工校验)。这种方式适合快速验证匹配逻辑,且能处理多对多的关联场景。

实现代码

library(tidyverse)

# 示例数据集
dataset1 <- tibble::tribble(
  ~exporter_group, ~exporter,
  "LOUIS DREYFUS", "LDC INDONESIA",
  "LOUIS DREYFUS", "LDC TRADING INDONESIA",
  "LOUIS DREYFUS", "LDC EAST INDONESIA",
  "LOUIS DREYFUS", "LOUIS DREYFUS"
)

dataset2 <- tibble::tribble(
  ~company, ~parent_company, ~subsidiares, ~market_cap_usd, ~bloomberg_ticker, ~thomson_reuters_ticker,
  "LOUIS DREYFUS COMPANY", NA, NA, NA, "0308213D NA EQUITY", NA
)

# *统一转成大写*避免大小写匹配问题
dataset1_clean <- dataset1 %>% mutate(exporter_group = str_to_upper(exporter_group))
dataset2_clean <- dataset2 %>% mutate(company = str_to_upper(company))

# 交叉连接后筛选符合条件的记录
matched_result <- dataset2_clean %>%
  cross_join(dataset1_clean) %>%
  filter(str_detect(company, exporter_group)) %>%
  # 恢复原字段格式(可选)
  mutate(
    company = str_to_title(company),
    exporter_group = str_to_title(exporter_group)
  )

# 查看结果
print(matched_result)

说明

  • 统一字符串大小写:避免因大小写不一致导致的匹配失败,这是容易忽略的关键点
  • 用cross_join生成所有组合:确保不会漏掉任何可能的匹配
  • 保留dataset2的所有字段:方便后续人工检查匹配是否准确

方法二:创建简洁名称映射表关联(更适合大规模扩展)

如果涉及数百家公司,提前维护一个简洁名称映射表会更高效。映射表可以包含标准名称(即dataset1的exporter_group)和所有可能的变体关键词,后续直接在dataset2中匹配生成标准列,再进行关联。

实现步骤

  1. 创建映射表:
# 映射表:标准名称 -> 匹配关键词(可根据实际情况扩展)
name_mapping <- tibble::tribble(
  ~standard_name, ~match_keyword,
  "LOUIS DREYFUS", "LOUIS DREYFUS",
  "LOUIS DREYFUS", "LDC" # 补充常见缩写
) %>% mutate(across(c(standard_name, match_keyword), str_to_upper))
  1. 在dataset2中匹配生成标准名称:
dataset2_with_standard <- dataset2 %>%
  mutate(company_upper = str_to_upper(company)) %>%
  left_join(name_mapping, by = character()) %>% # 交叉连接
  filter(str_detect(company_upper, match_keyword)) %>%
  select(-company_upper, -match_keyword) %>%
  distinct() # 去重避免重复匹配
  1. 与dataset1关联:
final_result <- dataset1 %>%
  left_join(dataset2_with_standard, by = c("exporter_group" = "standard_name"))

print(final_result)

说明

  • 映射表可逐步扩展:新增公司时只需在映射表中添加标准名称和对应的关键词,无需修改核心关联代码
  • 支持多关键词匹配:比如同一公司的全称、缩写都可以加入映射表,提升匹配覆盖率
  • 去重处理:避免同一dataset2记录被多次匹配

常见问题排查

  • 匹配失败先检查大小写:将所有字符串统一转成大写/小写后再尝试
  • 特殊字符干扰:如果公司名称包含标点、特殊符号,可先用str_remove_all清理(比如str_remove_all(company, "[[:punct:]]"))
  • 多关键词匹配:如果单一关键词不够,可在映射表中添加多个关键词条目

内容的提问来源于stack exchange,提问作者lyd-m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 15:01:34