R:GSUB循环替换字符

时间:2015-03-24 09:22:22

标签: r gsub

我正在尝试使用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函数,但是这个函数用字符替换字符,但不能用字符串替换字符串。

任何建议都非常感谢!

1 个答案:

答案 0 :(得分:2)

您可以尝试使用Hmisc库中的sedit函数

library(Hmisc)
sedit(text = strs, replace.vect, new.char.vect)
#[1] "1ppl2s.3n.b2d"