使用 agrep() 将字符串递归匹配并替换为向量元素

Recursively match and replace strings to vector element using agrep()

我有 2 个向量,它们是通过 regex 对特定模式的不同应用生成的:

> v1 <- c('abc', 'efg', 'hijk', 'mno')
> v2 <- c('abcde', 'ijklm')

我想使用 agrep()

将 v2 中的字符串匹配到 v1
> agrep(v2[1], v1, max.distance = 2)
[1] 1

> agrep(v2[2], v1, max.distance = 2)
[1] 3

这样 v1 中最接近 v2 的元素可以被 v2 替换,得到以下向量:

> rslt <- c('abcde', 'efg', 'ijklm', 'mno')
[1] "abcde" "efg"   "ijklm" "mno" 

我可能需要一个函数来改变 max.distance 数字,以便找到最接近的匹配项。

你可以这样做:

sapply(v1, function(x) {ifelse(length(agrep(x, v2)) > 0, agrep(x, v2, value = TRUE), x)})

哪个returns:

    abc     efg    hijk     mno 
"abcde"   "efg" "ijklm"   "mno"

请注意,如果输入同时包含 'abc' 和 'abcd',两者都将被替换为 'abcde'。我认为这是期望的行为?希望这对您有所帮助!