我有2个向量,它们是从regex
到某种模式的不同应用生成的:
> v1 <- c('abc', 'efg', 'hijk', 'mno')
> v2 <- c('abcde', 'ijklm')
我想使用agrep()
,
> 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
数字,以便找到最接近的匹配。
答案 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;。我认为这是理想的行为?希望这有帮助!