首页 > 解决方案 > 使用模糊连接匹配最大 1 个字符不同的字符串

问题描述

有没有办法检测两个字符串是否只有 1 到 0 个不同的字符?

可重现的例子:

library(fuzzyjoin)
library(stringr)
  
df1 <- data.frame(x = c("howaryou", "hello", "summer", "goodbye"), y = c(1:4))
df2 <- data.frame(x = c("howareyou", "heelo", "summe", "goodbye"), z = c(66:69))

fuzzy_left_join(df1, df2, match_fun = str_detect, by = "x")
      x.x y     x.y  z
1 howaryou 1    <NA> NA
2    hello 2    <NA> NA
3   summer 3   summe 68
4  goodbye 4 goodbye 69

我试过str_detect了,但这只有在不同的 chr 位于开头或结尾(“summer”和“summe”)时才有效。但是,我想得到

      x.x y     x.y    z
1 howaryou 1 howareyou 66
2    hello 2     heelo 67
3   summer 3     summe 68
4  goodbye 4   goodbye 69

我很感激任何建议!

标签: rstringcharacter

解决方案


stringdist可能是一种选择

library(fuzzyjoin)
stringdist_left_join(df1, df2, by = 'x')

-输出

#      x.x y       x.y  z
#1 howaryou 1 howareyou 66
#2    hello 2     heelo 67
#3   summer 3     summe 68
#4  goodbye 4   goodbye 69

推荐阅读