0

 agrep('timothy', c('timo','tim','timoth', 'timothys'), max.distance = 0.01, value=TRUE)

我想在数据框中一起输出原始字符串和所有可能的结果,如下所示。

Original Replace1 Replace2
timothy  timoth   timothys

这是可能的还是有更好的功能可以使用?

4

1 回答 1

1

我个人会将其保留为“长”格式与宽格式(您以后可以随时进行转换):

data.frame(
  original = "timothy",
  replacement = agrep('timothy', c('timo','tim','timoth', 'timothys'), max.distance = 0.01, value=TRUE),
  stringsAsFactors=FALSE
)
##   original replacement
## 1  timothy      timoth
## 2  timothy    timothys

你可能想要不止一次地这样做,所以我会把它作为一个函数。而且,由于agrep() can的输出是character(0),我们需要处理它,所以我们也将添加一个辅助函数:

`%|l0%` <- function(x, y) if (length(x) == 0) y else x

agrep_to_data_frame <- function(pattern, x, max.distance=0.01, costs=NULL) {
  data.frame(
    original = pattern,
    replacement = agrep(pattern, x, max.distance = max.distance, value=TRUE) %|l0% NA_character_,
    stringsAsFactors=FALSE
  )
} 

而且,现在它是一个单独的调用,您可以在purrr::map2()ormapply()等​​中使用它。

agrep_to_data_frame('timothy', c('timo','tim','timoth', 'timothys'))
##   original replacement
## 1  timothy      timoth
## 2  timothy    timothys
于 2018-01-18T12:08:14.180 回答