尝试编写一行代码,将一列数据框中的字符串与参考字符串进行比较,如果匹配则替换为常用字。例如,搜索列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
非常感谢任何帮助 - 谢谢!
答案 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"
结果会一样。