我有两个字符串。
mystring1 <- c("hello i am a cat. just kidding, i'm not a cat i'm a cat. dogs are the best animal. not cats!")
mystring2 <- c("hello i am a cat. just kidding, i'm not a cat i'm a cat. but i have a cat friend that is a cat.")
我想把两个字符串中的第三个词 "猫 "改成 "狗"。
理想的情况是 string1
和 string2
将改为。
mystring1
[1] "hello i am a cat. just kidding, i'm not a cat i'm a dog. dogs are the best animal. not cats!"
mystring2
[1] "hello i am a cat. just kidding, i'm not a cat i'm a dog. but i have a cat friend that is a cat."
什么是最好的方法? 到目前为止,我只用了 gsub
来替换字符,但我不知道这是否可以用来替换特定字符的出现。
你可以用
mystring1 <- c("hello i am a cat. just kidding, i'm not a cat i'm a cat. dogs are the best animal. not cats!")
mystring2 <- c("hello i am a cat. just kidding, i'm not a cat i'm a cat. but i have a cat friend that is a cat who knows a cat knowing a cat.")
sub("((cat.*?){2})\\bcat\\b", "\\1dog", mystring1, perl=TRUE)
由此可见
> sub("((cat.*?){2})\\bcat\\b", "\\1dog", c(mystring1, mystring2), perl=TRUE)
[1] "hello i am a cat. just kidding, i'm not a cat i'm a dog. dogs are the best animal. not cats!"
[2] "hello i am a cat. just kidding, i'm not a cat i'm a dog. but i have a cat friend that is a cat who knows a cat knowing a cat."
您可以使用 gsubfn
library(gsubfn)
p <- proto(fun = function(this, x) if(count == 3) 'dog' else x)
gsubfn('cat', p, c(mystring1, mystring2))
# [1] "hello i am a cat. just kidding, i'm not a cat i'm a dog. dogs are the best animal. not cats!"
# [2] "hello i am a cat. just kidding, i'm not a cat i'm a dog. but i have a cat friend that is a cat."
或者说,如果需要用字界包围。
gsubfn('\\bcat\\b', p, c(mystring1, mystring2), perl = TRUE)
# [1] "hello i am a cat. just kidding, i'm not a cat i'm a dog. dogs are the best animal. not cats!"
# [2] "hello i am a cat. just kidding, i'm not a cat i'm a dog. but i have a cat friend that is a cat."