如何匹配 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_add
和aa_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
我想在两个现有列之间的字符串匹配的基础上创建一个新列 (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_add
和aa_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