【发布时间】:2019-10-18 00:36:40
【问题描述】:
我希望能够模糊匹配一列并精确匹配另一列。
假设我的 df1 看起来像这样:
df2 看起来像这样:
我想模糊匹配“姓名”但精确匹配“年份”。所以“Ashley”和“Ashlee”将是匹配的。这是我目前所拥有的:
res <- fuzzy_left_join(
df,
df2,
by=c("Year","Name"),
list(`==`, function(x,y) stringdist(tolower(x), tolower(y), method="lv") <= 3)
)
res %>%
select(Year = Year.x, everything(), - Year.y)
不过,这似乎是过度匹配。不知道发生了什么。
【问题讨论】:
-
你用的是什么包?
-
我正在使用fuzzyjoin包。
-
如果你提供一些样本数据(不是图片,而是可以复制的方式),人们可以尝试帮助你
-
如果使用
match_fun并不容易,另一种方法是使用df2中的Name列转换gsub()和正则表达式,然后使用dplyr::left_join()。如果您提供一些示例数据,我很乐意这样做 -
实际上,我认为您已经在使用
match_fun和:list('==', function(x,y) stringdist(tolower(x), tolower(y), method="lv") <= 3。所以这就是你想要玩的东西,直到你得到正确的匹配。我不知道method="lv"是什么,所以我个人会使用gsub()。