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

时间:2017-10-05 07:05:08

标签: r replace string-comparison

我有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数字,以便找到最接近的匹配。

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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

返回:

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

请注意,如果输入包含例如&#39; abc&#39;和&#39; abcd&#39;,两者都将被替换为&#39; abcde&#39;。我认为这是理想的行为?希望这有帮助!