如何匹配 R 中两列之间的字符串?

How to match strings between two columns in R?

我想在两个现有列之间的字符串匹配的基础上创建一个新列 (MATCH)。例如-

st_add aa_add 匹配
jai maa durga 协会 jai maa durga 殖民地 匹配
埃尔夫公路 1 号公路 道路高速公路 2 elph 匹配
srinivan colony parel ist 斯里尼万巴士站 不匹配

如果第 1 列和第 2 列之间的三个或更多单词匹配,则第 3 列(MATCH)应显示“MATCH”。但如果少于 3 个单词匹配或根本没有匹配(例如第 3 行),则结果应为“NO MATCH”

我如何使用 R 来做到这一点?

可以在st_addaa_add中将数据拆分成词,统计常用词的个数,如果大于等于3则赋值'MATCH'

df$MATCH <- ifelse(mapply(function(x, y) length(intersect(x, y)), 
                strsplit(df$st_add, '\s+'),
                strsplit(df$aa_add, '\s+')) >= 3, 'MATCH', 'NOT MATCH')
df

#                     st_add               aa_add     MATCH
#1     jai maa durga society jai maa durga colony     MATCH
#2       elph road highway 1  road highway 2 elph     MATCH
#3 srinivan colony parel ist   srinivan bus depot NOT MATCH

数据

df <- structure(list(st_add = c("jai maa durga society", "elph road highway 1", 
"srinivan colony parel ist"), aa_add = c("jai maa durga colony", 
"road highway 2 elph", "srinivan bus depot")), row.names = c(NA, 
-3L), class = "data.frame")

你可以试试stringdist。您可以为匹配设置字符串距离阈值。它还提供了多种计算距离的方法。感谢 Ronak 提供数据集代码。

library(stringdist)

df$match <- ifelse(stringdist(df$st_add, df$aa_add) < 12, "MATCH", "NOT MATCH")
df

#                      st_add               aa_add     match
# 1     jai maa durga society jai maa durga colony     MATCH
# 2       elph road highway 1  road highway 2 elph     MATCH
# 3 srinivan colony parel ist   srinivan bus depot NOT MATCH