R 中跨列的模糊匹配

Sha*_*ani 7 string r string-matching fuzzy-logic fuzzy-comparison

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

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

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

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

从数据中可以清楚地看出,第 1 行和第 2 行足够相似,足以确信名称相同。第三行是相同的名称,尽管拼写错误,第四行完全不同。

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

Mar*_*Blo 8

包中有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
Run Code Online (Sandbox Code Playgroud)