高效的字符串搜索和替换
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 "
我正在尝试清理数据库中大约 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 "