R中跨列的模糊匹配
Fuzzy Match Across Columns in R
我如何衡量名称在 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 行是相同的名称,即使拼写错误,第四行完全不同。
作为输出,我想创建第三列来描述名称之间的相似程度或returns某种布尔值以指示可以进行模糊匹配。
包 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
我如何衡量名称在 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 行是相同的名称,即使拼写错误,第四行完全不同。
作为输出,我想创建第三列来描述名称之间的相似程度或returns某种布尔值以指示可以进行模糊匹配。
包 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