R清理数据-amatch可合并来自2个单独数据帧的接近匹配

R清理数据-amatch可合并来自2个单独数据帧的接近匹配,r,data-cleaning,R,Data Cleaning,我很难弄清楚R中的amatch函数 2数据框架、受访者(有用户输入)和普查。我已经将用户输入与人口普查中的完美匹配进行了规范化和合并。我现在想做一个“最接近的匹配”来缩小剩下的(到目前为止还没有匹配的)受访者条目。我是否在merge函数中嵌套了amatch?我已经阅读了amatch文档并进行了广泛的搜索,但未能使其正常工作 我甚至无法获得正确/错误的输出,尝试按照文档进行操作: library(stringdist) closest <- amatch(respondent, census

我很难弄清楚R中的amatch函数

2数据框架、受访者(有用户输入)和普查。我已经将用户输入与人口普查中的完美匹配进行了规范化和合并。我现在想做一个“最接近的匹配”来缩小剩下的(到目前为止还没有匹配的)受访者条目。我是否在merge函数中嵌套了amatch?我已经阅读了amatch文档并进行了广泛的搜索,但未能使其正常工作

我甚至无法获得正确/错误的输出,尝试按照文档进行操作:

library(stringdist)
closest <- amatch(respondent, census, nomatch = 0, match NA = TRUE)

尝试使用
maxdist
值:

stringdist::amatch(respondent$resp_input, census$census_title, maxDist = 5)
?amatch

maxDist-如果x中的元素的距离大于maxDist,则它们将不会与表中的元素匹配


字符串之间的最大距离取决于您选择的比较两个字符串的方法。还要注意,
amatch
返回最接近匹配的索引

除了Ronak的答案之外,还可以查看
fuzzyjoin
包,该包简化了在模糊字符串匹配中加入的过程:

fuzzyjoin::stringdist_join(
  x = respondent, 
  y = census, 
  by = c("resp_input" = "census_title"),
  method = "osa",
  ignore_case = TRUE,
  max_dist = 3,
  mode = "inner"
  )

#>   respondent resp_input    code census_title
#> 1        196  Bramppton 3521010     Brampton
#> 2        197     Tornto 3520005      Toronto
#> 3        209    Kleowna 5935010      Kelowna
#> 4        215   Caledonn 3521024      Caledon
#> 5        229 watsonlake 6001003  Watson Lake

您可以使用各种和
max_dist
参数来获得数据的最佳结果。

太棒了:)max_dist=2似乎是我的数据集的神奇数字我相信这是一个很好的解决方案,但我太笨了,无法找到一个匹配来处理我的数据
fuzzyjoin::stringdist_join(
  x = respondent, 
  y = census, 
  by = c("resp_input" = "census_title"),
  method = "osa",
  ignore_case = TRUE,
  max_dist = 3,
  mode = "inner"
  )

#>   respondent resp_input    code census_title
#> 1        196  Bramppton 3521010     Brampton
#> 2        197     Tornto 3520005      Toronto
#> 3        209    Kleowna 5935010      Kelowna
#> 4        215   Caledonn 3521024      Caledon
#> 5        229 watsonlake 6001003  Watson Lake