2017-04-11 73 views
0

试图编写一行代码,将一列数据帧中的字符串与引用字符串进行比较,如果匹配则替换为普通单词。例如,搜索列A并在列B中查找匹配项并用单词'name'替换匹配的字符串在两个不同的数据框中匹配字符串后用普通短语替换字符串R

想法?

例子:

v1 <- c("corey joe","joe", "emily", "joe") 
v2 <- c("corey", "emily") 

最终输出应该是:

v1 = "name joe joe name joe" 

我用

ifelse(pmatch(v1, v2), 'name') 
NA NA name NA 

与部分成功,但它不会改变克里的名字,因为谷歌也在那个字符串中。它也转换乔到NA,我需要保持它乔

任何帮助将不胜感激 - 谢谢!

回答

1

您可以使用stringr的str_replace函数

library(stringr) 

value <- str_replace(v1,"corey|emily","name") 

> str_replace(v1,"corey|emily","name") 
[1] "name joe" "joe"  "name"  "joe" 

在你想要的一切成一个字符串,就可以在paste如下使用collapse选项的情况下:

> paste(value,collapse=" ") 
[1] "name joe joe name joe" 

如果你想使用来自BASE的gsub R

value <- gsub("corey|emily","name",v1) 

> gsub("corey|emily","name",v1) 
[1] "name joe" "joe"  "name"  "joe"  
> 
> paste(value,collapse=" ") 
[1] "name joe joe name joe" 

如果你想使用变量,那么你可以使用paste0

str_replace(v1,paste0(v2[1],"|",v2[2]),"name") 

更确切地说:

str_replace(v1,paste0(v2[1:length(v2)],collapse="|"),"name") 

编辑注释后: 我承认,所以一正如@Scarabee建议的那样,增加了非常简单的解决方案,即str_replace(v1,v2,"name")

> value <- str_replace(v1,paste0(v2,collapse="|"),"name") 
> final <- paste(value,collapse=" ") 
> final 
[1] "name joe joe name joe" 

结果将是相同的。