高效的字符串搜索和替换

Efficient String Search and Replace

我正在尝试清理数据库中大约 200 万个条目,这些条目由职位组成。许多人都有几个缩写,我希望将其更改为一个统一且更易于搜索的选项。到目前为止,我只是 运行 使用单独的 mapply(gsub(...) 命令浏览该专栏。但是我有大约 80 个更改要以这种方式进行,所以 运行 需要将近 30 分钟。 必须有更好的方法。我是字符串搜索的新手,我发现了 *$ 技巧,这很有帮助。有没有办法在一次 mapply 中进行多次搜索?我想这可能更快? 任何帮助都会很棒。谢谢

下面是一些代码。 test是一列200万个人职称。

test <- mapply(gsub, " Admin ", " Administrator ", test)
test <- mapply(gsub, "Admin ", "Administrator ", test)
test <- mapply(gsub, " Admin*$", " Administrator", test)
test <- mapply(gsub, "Acc ", " Accounting ", test)
test <- mapply(gsub, " Admstr ", " Administrator ", test)
test <- mapply(gsub, " Anlyst ", " Analyst ", test)
test <- mapply(gsub, "Anlyst ", "Analyst ", test)
test <- mapply(gsub, " Asst ", " Assistant ", test)
test <- mapply(gsub, "Asst ", "Assistant ", test)
test <- mapply(gsub, " Assoc ", " Associate ", test)
test <- mapply(gsub, "Assoc ", "Associate ", test)

一个选择是使用 library(qdap)

中的 mgsub
mgsub(patternVec, replaceVec, test)

数据

patternVec <- c(" Admin ", "Admin ")
replaceVec <- c(" Administrator ",  "Administrator ")

这是一个有效的基础 R 解决方案。您可以定义一个包含所有模式及其替换的数据框。然后在行模式下使用 apply() 并在 test 向量上为每个 pattern/replacement 组合调用 gsub()。下面是演示这一点的示例代码:

df <- data.frame(pattern=c(" Admin ", "Admin "),
                 replacement=c(" Administrator ", "Administrator "))

test <- c(" Admin ", "Admin ")

apply(df, 1, function(x) {
                test <<- gsub(x[1], x[2], test)
             })

> test
[1] " Administrator " "Administrator "