【问题标题】:Match strings by distance between non-equal length ones按长度不等的字符串之间的距离匹配字符串
【发布时间】:2021-08-20 08:27:27
【问题描述】:

假设我们有以下数据集:

数据集 A:

name        age
Sally       22
Peter       35
Joe         57
Samantha    33
Kyle        30
Kieran      41
Molly       28

数据集 B:

name        company
Samanta     A
Peter       B
Joey        C
Samantha    A

我的目标是匹配两个数据集,同时按距离对后续值排序并仅保留相关匹配项。换句话说,输出应该如下所示:

name_a       name_b         age     company     distance
Peter        Peter          35      B           0.00
Samantha     Samantha       33      A           0.00
Samantha     Samanta        33      A           0.04166667
Joe          Joey           57      C           0.08333333
  

在本例中,我使用stringdist 中的method = "jw" 计算距离,但我对任何其他可能有效的方法都很满意。到目前为止,我一直在尝试使用 stringrstringdist 等软件包。

【问题讨论】:

标签: r dplyr stringr stringdist


【解决方案1】:

您可以使用stringdist_inner_join 连接两个数据框,并使用levenshteinSim 获取两个名称之间的相似度。

library(fuzzyjoin)
library(dplyr)

stringdist_inner_join(A, B, by = 'name') %>%
  mutate(distance = 1 - RecordLinkage::levenshteinSim(name.x, name.y))  %>%
  arrange(distance)

#    name.x age   name.y company distance
#1    Peter  35    Peter       B    0.000
#2 Samantha  33 Samantha       A    0.000
#3 Samantha  33  Samanta       A    0.125
#4      Joe  57     Joey       C    0.250

【讨论】:

    猜你喜欢
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多