我正在尝试使用gsub替换字符串中的多个字符串。 在一般情况下,gsub(pattern,replacement,x)采用字符向量x,但模式和替换都假定为字符或正则表达式。模式和替换不能是字符的向量。
我可以使用循环粗略地实现它,但在我的情况下,模式和替换都是长向量,所以我希望有一个"矢量化"尽可能实施
我目前的实施如下:
strs<-"apples.in.bed"
replace.vect<-c("a","e","i")
new.char.vect<-c("1","2","3")
temp <- strs
for(i in 1:length(replace.vect)){
temp<-gsub(replace.vect[i], new.char.vect[i],temp)
}
# temp: "1ppl2s.3n.b2d"
但是,我想在不使用for循环的情况下得出相同的结果。我也尝试过使用apply,但在内部似乎所有的角色都被循环了,所以它似乎没有提供太多的性能提升;
apply(cbind(replace.vect, new.char.vect),1,function(x) {strs<<-gsub(x[1],x[2],strs)})
另外 - 我还考虑了here所示的chartr函数,但是这个函数用字符替换字符,但不能用字符串替换字符串。
任何建议都非常感谢!
答案 0 :(得分:2)
您可以尝试使用Hmisc库中的sedit函数
library(Hmisc)
sedit(text = strs, replace.vect, new.char.vect)
#[1] "1ppl2s.3n.b2d"