2016-11-23 92 views
0

我正在嘗試使用agrep命令在R中進行字符串匹配。 但是我擔心它會在找到一個好匹配時停下來,而不是優化找到最好的匹配。雖然我有可能瞭解它的工作原理是不正確的。我下面的例子重現了這個問題,雖然很粗糙。爲什麼R中的agrep找不到最佳匹配?

example1 <- c("height","weight") 
example2 <- c("height","weight") 

y <- c("","") 
for(i in 1: 2){ 
x <- agrep(example1[i], example2, max.distance = 1, ignore.case=TRUE, value=TRUE, useBytes=TRUE) 
x <- paste0(x,"") 
y[i] <- x 
    } 

正如你將有希望看到的那樣,agrep已經將體重與身高匹配,當體重更好時,體重也會出現。

這是爲什麼?

+0

值'x'是一個包含兩個值的向量,但只有第一個被分配給'y'(你應該有一個警告),所以只給出'height' – etienne

+0

所以x包含滿足條件的所有匹配,並且我只是選擇第一個這些,這不一定是最好的匹配? 有沒有提取最好的方法? 目前我不得不做一個完全匹配,然後模糊匹配來解決問題。然而,這個例子並沒有讓我充滿信心,因爲我的模糊匹配的其餘部分。 – LanieD

+1

是的就是這樣。你可以看看[這個問題的最佳匹配](http://stackoverflow.com/questions/5721883/agrep-only-return-best-matches/27090472) – etienne

回答

0

您可以(從高度從例題例1個最匹配的「高度」)嘗試adist(廣義的Levenshtein(編輯)距離),結果如下:

adist(example1, example2) 
    [,1] [,2] 
[1,] 0 1 
[2,] 1 0 

example2[apply(adist(example1, example2), 1, which.min)] 
# [1] "height" "weight"