str_replace具有多个模式和多个替换的字符向量

时间:2012-09-07 16:47:37

标签: regex r stringr

  

可能重复:
  Conditional gsub replacement

如何用定义的替换替换字符向量的certian元素?

county <- c("wagner", "mccain", "mcclain", "dallas")

pattern     <- c("mccain",  "mcclain",   "mcdonald")
replacement <- c("mc cain", "mc clain",  "mc donald")

library(stringr)
str_replace(county, pattern, replacement)

看起来这应该很简单,但我已经搞乱了很长时间而且无法弄明白。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果我理解你的问题,你不想使用正则表达式进行搜索和替换(例如通过gsub)。在这方面,使用变量名pattern可能会产生误导。

相反,您只想在完全匹配的情况下进行简单替换。您需要使用matchifelse

ifelse(is.na(idx <- match(county, pattern)), county, replacement[idx])
# [1] "wagner"   "mc cain"  "mc clain" "dallas"

你也可以把它放在一个函数中:

substitute.all <- function(pattern, replacement, x) {
   idx <- match(x, pattern)
   return(ifelse(is.na(idx), x, replacement[idx]))
}
substitute.all(pattern, replacement, county)
# [1] "wagner"   "mc cain"  "mc clain" "dallas"