【问题标题】:Replace string with common phrase after matching string in two different dataframes R在两个不同的数据帧R中匹配字符串后用常用短语替换字符串
【发布时间】:2017-04-11 17:42:12
【问题描述】:

尝试编写一行代码,将数据框中的一列中的字符串与参考字符串进行比较,如果匹配,则用常用词替换。例如,搜索 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 更改为名称,因为 google 也在该字符串中。它还将 joe 转换为 NA,我需要保留它 joe

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

【问题讨论】:

    标签: r regex match


    【解决方案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 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"
    

    结果是一样的。

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 2014-08-01
      • 2021-06-02
      • 1970-01-01
      相关资源
      最近更新 更多