我在R中使用’agrep’功能,返回一个匹配的向量.我想要一个类似于agrep的功能,只能返回最佳匹配,或者如果有关系,最好的匹配.目前,我正在使用结果向量的每个元素上的’cba’包中的’sdist()’函数,但这似乎是非常多余的.
/ edit:这里是我目前使用的功能.我想加快速度,因为计算两次距离似乎是多余的.
library(cba) word <- 'test' words <- c('Teest','teeeest','New York City','yeast','text','Test') ClosestMatch <- function(string,StringVector) { matches <- agrep(string,StringVector,value=TRUE) distance <- sdists(string,matches,method = "ow",weight = c(1,2)) matches <- data.frame(matches,as.numeric(distance)) matches <- subset(matches,distance==min(distance)) as.character(matches$matches) } ClosestMatch(word,words)
解决方法
RecordLinkage包从CRAN中删除,使用stringdist:
library(stringdist) ClosestMatch2 = function(string,stringVector){ stringVector[amatch(string,stringVector,maxDist=Inf)] }