【问题标题】:How do I do one fuzzy and one exact match in a dataframe?如何在数据框中进行一次模糊匹配和一次精确匹配?
【发布时间】: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") &lt;= 3。所以这就是你想要玩的东西,直到你得到正确的匹配。我不知道method="lv" 是什么,所以我个人会使用gsub()

标签: r fuzzyjoin


【解决方案1】:

看来您走在正确的轨道上(如果没有您的数据或您向我们展示您的结果,很难判断!)

fuzzyjoin 将提供字符串距离

你可以使用 %&gt;% group_by(Year,Name) %&gt;% slice_min(dist) 根据距离得到最佳答案。

【讨论】:

    猜你喜欢
    • 2018-06-09
    • 2021-01-26
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 2017-11-30
    相关资源
    最近更新 更多