2

可能重复:
有条件的 gsub 替换

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

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)

看起来这应该很简单,但我已经搞砸了很长时间,无法弄清楚。任何帮助将不胜感激。

4

1 回答 1

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"  
于 2012-09-07T19:18:03.687 回答