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

R语言需求:为新表中模糊匹配的姓名分配对应ID

近似姓名匹配并关联ID的解决方案

可以结合dplyr和fuzzyjoin包的stringdist_join实现需求,核心思路是先做近似匹配,再筛选每个目标姓名的最佳匹配项:

步骤1:加载依赖包

library(dplyr)
library(fuzzyjoin)

步骤2:执行近似匹配与结果筛选

# 读取示例数据
df1 <- read.table(text="
id  full_name
1   'Tom Jones'
2   'Jim James'", header = TRUE, stringsAsFactors = FALSE)

df2 <- read.table(text="
full_name
'Tom Jones Jr.'
'Jim James Ii'", header = TRUE, stringsAsFactors = FALSE)

# 执行近似匹配并筛选最佳结果
result_df <- stringdist_join(df2, df1, 
                            by = "full_name",
                            max_dist = 5,  # 根据姓名差异程度调整最大允许距离
                            method = "lv") %>%  # 使用Levenshtein编辑距离计算相似度
  group_by(full_name.x) %>%  # 按df2中的姓名分组
  filter(stringdist == min(stringdist)) %>%  # 保留每组中匹配距离最小的项
  ungroup() %>%
  select(id, full_name = full_name.x)  # 整理成目标格式

# 查看最终结果
print(result_df)

关键参数说明

  • method = "lv":采用Levenshtein编辑距离计算两个字符串的差异,适合处理姓名后缀差异的场景;也可根据实际情况换成jaccard、cosine等其他匹配算法。
  • max_dist:设置最大允许的匹配距离,确保只保留差异较小的匹配对,避免错误关联。

输出结果

# A tibble: 2 × 2
     id full_name     
  <int> <chr>         
1     1 Tom Jones Jr. 
2     2 Jim James Ii  

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:58:33