R -确定2个不同列中的值是否至少95%匹配

hk8txs48  于 2023-06-27  发布在  其他
关注(0)|答案(1)|浏览(110)

考虑以下示例dataframe:

df <- data.frame(Client = c('Client1', 'Client2', 'Client3', 'Client4', 'Client5'),
         'Home Address' = c('123 N. Franklin Ave.', '345 Circle Drive', '567 Smith St. Suite 5', '678 Buchanan Rd. SW', '12 State Street'),
         'Mail Address' = c('123 Franklin Avenue', '345 S. Circle Dr.', '567 Smith Street Ste 5', '678 Buchanan Road', '17 Ralph Lane'))

如果你仔细观察与地址相关的列,它们基本上都是(除了一个),唯一的区别是包括或排除了方向或街道缩写。我想做的是在两者之间进行比较,以确定两个地址列之间是否至少有95%的匹配。
因此,示例结果将是df的附加列,说明“是”或“否”。
如何做到这一点?

f4t66c6m

f4t66c6m1#

这里是一个使用Jaro-Winkler距离的例子,它使用某个“窗口”内匹配字符的数量、换位和两个字符串的长度来计算相似性分数。在开头具有匹配字符的字符串的权重更大(p)。

library(stringdist)

df |>
  dplyr::mutate(jw = 1 - stringdist(`Home Address`, `Mail Address`, method = "jw", p = .1))

您可以使用此jw列为数据创建截止值。

输出

Client  `Home Address`        `Mail Address`            jw
  <chr>   <chr>                 <chr>                  <dbl>
1 Client1 123 N. Franklin Ave.  123 Franklin Avenue    0.872
2 Client2 345 Circle Drive      345 S. Circle Dr.      0.862
3 Client3 567 Smith St. Suite 5 567 Smith Street Ste 5 0.913
4 Client4 678 Buchanan Rd. SW   678 Buchanan Road      0.934
5 Client5 12 State Street       17 Ralph Lane          0.555

相关问题