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

怪胎

PHP中str_replace(和preg_replace)函数用替换字符串替换所有出现的搜索字符串。我在这里最感兴趣的是,如果searchreplaceargs是数组(在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))
约书亚·乌尔里希(Joshua Ulrich)

在您的示例中,使用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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何替换Java字符串中的一组标记?

用python中的空字符串替换捕获的组

如何匹配特殊字符并替换相应的字符串?

替换与模式匹配的字符串部分

用R中的匹配替换字符串的问题

用熊猫的另一列中的相应字符串替换字符串

根据条件替换字符串中的匹配模式

R中的gsubfn,如何有条件地仅替换一组字符串中的第二组数字

如何使用字符串包替换R中匹配项中的特定组?

字符串替换为模式匹配

用值列表替换字符串中的模式(SQL)

用匹配的模式替换python中的字符串

如何用特定字符替换一组重复的字符串模式?

替换一组文件中的文本字符串

文本替换-模式是一组字符串[r]

用R中的regexp替换完全匹配的字符串

如何根据匹配字符串中的一组字母替换字符串的一部分?

如何用不同的字符串替换一组文件中的字符串?

独立(并行)替换字符串中的一组子字符串

用相应的匹配字符串替换一个字符串

匹配模式的字符串替换

用一组词组中的随机词替换字符串中的整个词

替换在字符串 c# 中找到的第一组引号中的内容

使用一组规则替换字符串中的多个字符

将字符串替换为 Python 中的匹配模式

如何使用 R、stringr 或其他包替换长字符串中的一组单词?

除了一组子字符串之外,如何替换字符串中的所有内容?

如何替换句子中的一组字符串

sed 可以在一行中替换模式子字符串匹配中的单词吗?