【问题标题】:Fuzzy Match Across Columns in RR中跨列的模糊匹配
【发布时间】:2020-11-01 15:05:05
【问题描述】:

如何衡量名称在 r 中的相似程度?换句话说,可以进行模糊匹配的程度。

例如,我正在使用如下所示的数据框:

Name.1 <- c("gonzalez", "wassermanschultz", "athanasopoulos", "armato")
Name.2 <- c("gonzalezsoldevilla", "schultz", "anthanasopoulos", "strain")

df1 <- data.frame(Name.1, Name.2)
df1
            Name.1             Name.2
1         gonzalez gonzalezsoldevilla
2 wassermanschultz            schultz
3   athanasopoulos    anthanasopoulos
4           armato             strain

从数据中可以清楚地看出,第 1 行和第 2 行非常相似,足以确信名称相同。第 3 行名称相同,但拼写错误,而第 4 行则完全不同。

作为输出,我想创建第三列来描述名称之间的相似程度或返回某种布尔值以指示可以进行模糊匹配。

【问题讨论】:

    标签: r string string-matching fuzzy-logic fuzzy-comparison


    【解决方案1】:

    stringdist 包中有一个函数stingsim,它为您提供了一个介于 0 和 1 之间的数字,用于表示字符串之间的相似性。

    Name.1 <- c("gonzalez", "wassermanschultz", "athanasopoulos", "armato")
    Name.2 <- c("gonzalezsoldevilla", "schultz", "anthanasopoulos", "strain")
    library(stringdist)
    
    df1 <- data.frame(Name.1, Name.2)
    df1$similar <- stringsim(Name.1, Name.2)
    df1
    #>             Name.1             Name.2   similar
    #> 1         gonzalez gonzalezsoldevilla 0.4444444
    #> 2 wassermanschultz            schultz 0.4375000
    #> 3   athanasopoulos    anthanasopoulos 0.9333333
    #> 4           armato             strain 0.1666667
    

    【讨论】:

    • 这太棒了!非常感谢您提供这个包裹!感谢您的帮助。
    • @Sharif Amlani 欢迎您。你应该感谢包的作者。
    • 太好了,我会给他/她发邮件!
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 2021-12-24
    • 2022-01-06
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2018-06-07
    相关资源
    最近更新 更多