在两个不同的数据帧中匹配字符串后,用常用短语替换字符串R

时间:2017-04-11 17:42:13

标签: r regex match

尝试编写一行代码,将一列数据框中的字符串与参考字符串进行比较,如果匹配则替换为常用字。例如,搜索列A并在列B中查找匹配项,并将匹配的字符串替换为单词“name”

思想?

示例:

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

部分成功,但它没有改变corey到name,因为google也在该字符串中。它还将joe转换为NA,我需要保持joe

非常感谢任何帮助 - 谢谢!

1 个答案:

答案 0 :(得分: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" 

如果您想将所有内容都放在一个字符串中,可以使用collapse中的paste选项,如下所示:

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

如果您想使用BASE R中的 gsub

  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")

编辑评论后: 而且我承认,SO是一个很棒的地方,正如 @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"

结果会一样。