gpt4 book ai didi

用 R 中的相应替换字符串替换一组模式匹配

转载 作者:行者123 更新时间:2023-12-04 12:18:30 25 4
gpt4 key购买 nike

str_replace (和 preg_replace )PHP 中的函数用替换字符串替换所有出现的搜索字符串。这里最让我感兴趣的是,如果 searchreplace args 是数组(在 R 中我们称之为向量),然后 str_replace从每个数组(向量)中获取一个值并使用它们来搜索和替换主题。

换句话说,R(或某些 R 包)是否具有执行以下操作的功能:

string <- "The quick brown fox jumped over the lazy dog."
patterns <- c("quick", "brown", "fox")
replacements <- c("slow", "black", "bear")
xxx_replace_xxx(string, patterns, replacements) ## ???
## [1] "The slow black bear jumped over the lazy dog."

所以我正在寻找类似 chartr 的东西,但用于搜索模式和任意数量字符的替换字符串。这不能通过一次调用 gsub() 来完成。作为其 replacement参数只能是单个字符串,参见 ?gsub .所以我目前的实现是这样的:
xxx_replace_xxx <- function(string, patterns, replacements) {
for (i in seq_along(patterns))
string <- gsub(patterns[i], replacements[i], string, fixed=TRUE)
string
}

但是,如果 length(patterns),我正在寻找更快的东西很大 - 我有很多数据要处理,我对当前的结果不满意。

用于基准测试的示例玩具数据:
string <- readLines("http://www.gutenberg.org/files/31536/31536-0.txt", encoding="UTF-8")
patterns <- c("jak", "to", "do", "z", "na", "i", "w", "za", "tu", "gdy",
"po", "jest", "Tadeusz", "lub", "razem", "nas", "przy", "oczy", "czy",
"sam", "u", "tylko", "bez", "ich", "Telimena", "Wojski", "jeszcze")
replacements <- paste0(patterns, rev(patterns))

最佳答案

对于您的示例,使用 PCRE 而不是固定匹配需要大约 1/3 的时间在我的机器上。

xxx_replace_xxx_pcre <- function(string, patterns, replacements) {
for (i in seq_along(patterns))
string <- gsub(patterns[i], replacements[i], string, perl=TRUE)
string
}
system.time(x <- xxx_replace_xxx(string, patterns, replacements))
# user system elapsed
# 0.491 0.000 0.491
system.time(p <- xxx_replace_xxx_pcre(string, patterns, replacements))
# user system elapsed
# 0.162 0.000 0.162
identical(x,p)
# [1] TRUE

关于用 R 中的相应替换字符串替换一组模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676045/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com