我需要进行多个替换。我使用gsub。我想知道是否可能做到像我想要将所有的á替换为a,所有的é替换为e:
gsub(c("á","é"),c("a","e"),"ána belén")
使用这个,我遇到了一个错误。
如果不可能的话,有其他的函数可以实现吗?
是的,chartr
存在:
chartr("áé" ,"ae","ána belén")
# [1] "ana belen"
编辑 由于您现在要求一个更通用的函数,可以处理整个单词,下面是我会做的:
rgsub <- function(pattern, replacement, x) {
ARGS <- Map(c, pattern = pattern, replacement = replacement)
FUN <- function(x, y) gsub(y[['pattern']], y[['replacement']], x)
Reduce(FUN, ARGS, x)
}
qdap
相同的结果,但速度稍快:i <- c("cat", "dog", "mouse")
j <- c("lion", "bulldog", "elephant")
k <- c("cat", "dog", "dog", "mouse", "ant", "mouse")
identical(mgsub(i, j, k), rgsub(i, j, k))
# [1] TRUE
library(microbenchmark)
microbenchmark(mgsub(i, j, k), rgsub(i, j, k))
# Unit: microseconds
# expr min lq median uq max neval
# mgsub(i, j, k) 586.60 608.6920 629.7840 659.2415 1278.973 100
# rgsub(i, j, k) 81.91 88.9305 97.0165 107.2390 229.835 100
qdap
可能对很多事情都很好,但对于你的特定应用程序来说可能过于复杂。
qdap
中的 mgsub
。 library(qdap)
mgsub(c("á","é"),c("a","e"),"ána belén")
#[1] "ana belen"
单词
。 mgsub(c("cat", "dog", "mouse"),c("lion", "bulldog", "elephant"),
c("cat", "dog", "dog", "mouse", "ant", "mouse"))
#[1] "lion" "bulldog" "bulldog" "elephant" "ant" "elephant"
for
循环中使用gsub
。或者像这个答案一样使用Reduce
:http://stackoverflow.com/a/25584852/1201032 - flodelmgsub
中有一些错误处理,所以我预计它会慢一些。通常安全性会牺牲速度,但最终可以节省时间。 - Tyler Rinker