R:agrep结果量词

时间:2015-10-26 14:37:54

标签: r agrep

是否有内置的方法来量化agrep函数的结果?例如。在

agrep("test", c("tesr", "teqr", "toar"), max = 2, v=T)
[1] "tesr" "teqr"

tesr距离test只有1个字符排列,而teqr为2,toar为3,因此找不到。显然,tesr的“概率”高于teqr。如何以排列数或百分比来检索? 谢谢!

编辑:抱歉没有把这个问题置于首位。我已经运行了两个步骤:agrep获取我的列表,然后adist获得N个排列。 adist速度较慢,运行时间是我数据集中的一个重要因素

2 个答案:

答案 0 :(得分:4)

使用adist()的另一个选项:

s <- c("tesr", "teqr", "toar")
s[adist("test", s) < 3]

或使用stringdist

library(stringdist)
s[stringdist("test", s, method = "lv") < 3]

给出了:

#[1] "tesr" "teqr"

<强>基准

x <- rep(s, 10e5)
library(microbenchmark)
mbm <- microbenchmark(
  levenshteinDist = x[which(levenshteinDist("test", x) < 3)],
  adist = x[adist("test", x) < 3],
  stringdist = x[stringdist("test", x, method = "lv") < 3],
  times = 10
)

给出了: enter image description here

Unit: milliseconds
            expr       min        lq      mean    median        uq       max neval cld
 levenshteinDist  840.7897 1255.1183 1406.8887 1398.4502 1510.5398 1960.4730    10  b 
           adist 2760.7677 2905.5958 2993.9021 2986.1997 3038.7692 3472.7767    10   c
      stringdist  145.8252  155.3228  210.4206  174.5924  294.8686  355.1552    10 a  

答案 1 :(得分:3)

Levenshtein距离是从一个字符串到另一个字符串的编辑数。可能会对“RecordLinkage”包感兴趣。它提供下面的编辑距离计算,它应该执行on par with agrep。虽然它不会返回与Rscript -e "require(knitr)" -e "knitr::spin('script.R')" -e 'knitr::opts_chunk$set(fig.path="./figs")'相同的结果。

agrep