匹配和替换文本向量

时间:2016-02-02 19:52:11

标签: regex r

我有一个长文本向量(a.v)和一个短文本向量(b.v)。一些b.v词存在于a.v-中只有一次而其他词可以是几次,或者根本不存在。

我希望A.v中存在的所有b.v单词都将被“ed”替换。因此“new.a.v”将具有相同数量的单词,但不是b.v中存在的单词,而是“ed”。

我尝试了grep并替换了解决方案变体,但没有成功。如果b.v只包含1个单词,我想它更容易,但是b.v包括70个单词,打字并单独替换每个单词不是一个有趣的选项。

我该怎么办? 我有

 `x<- c( "dog", "cat", "cat", "bear", "dog", "fish", "sky", "table", "chair", "girl", "boy" ,"picture")
 pet.animal<- c( "dog", "cat", "fish" )
 house.things<- c("table" ,"chair", "picture")
 x<- str_replace_all(x,"dog", "pet") 
 x<- str_replace_all(x,"cat", "pet") 

我正在寻找的最终产品是:

x<- c( "pet", "pet", "pet", "bear", "pet", "pet", "sky", "house", "house", "girl", "boy" ,"house")

我能做到

x<- c( "dog", "cat", "cat", "bear", "dog", "fish", "sky", "table", "chair", "girl", "boy" ,"picture")
pet.animal<- c( "dog", "cat", "fish" )
house.things<- c("table" ,"chair", "picture")
x<- str_replace_all(x,"dog", "pet") 
x<- str_replace_all(x,"cat", "pet") 

但是我需要更换每一个...所以我正在寻找一种方法来使用pet.animal作为替换的“模式”。将查看第一个pet.animal是否在x中的内容,如果存在则替换它,如果不移动到pet.animal中的第二个单词,依此类推。

只是为了让事情变得更复杂,pet.animal和house.things的长度不一样......

1 个答案:

答案 0 :(得分:0)

这适用于pethouse

 v<-gsub(paste(house.things, collapse='|'), 'house', gsub(paste(pet.animal, collapse='|'), 'pet', x))
>v
#[1] "pet"   "pet"   "pet"   "bear"  "pet"   "pet"   "sky"   "house" "house" "girl" 
#[11] "boy"   "house"