【问题标题】:Return a string from a vector partly matching variable values从部分匹配变量值的向量中返回一个字符串
【发布时间】:2018-11-14 03:18:42
【问题描述】:

我有一个字符串向量:

keywords <- c("kw 1", "kw2", "kw3", "kw4", "kw5", "kw6", "kw7", "kw8", 
              "kw 9 kw", "kw10", "kw11", "kw12", "kw13", "kw14", "kw15")

还有一个带有空列关键字的数据框:

df <- data.frame("Description" = c("blabla kw10", "blabla kw15","blabla kw 1", 
                                   "blabla kw13", "blabla kw7", "kw2 bla", "kw8 blabla","bla kw11 bla", 
                                   "blabla kw10","blakw 9 kw", "blablakw4", "blakw 1bla"),
                 "Keyword" = NA)

我需要找到一种方法在 keywords 向量中查找与 Description 变量中的值部分匹配的字符串,并从 keywords 向量作为 df 数据框中 Keywords 列的值。

我需要这个结果

df <- data.frame("Description" = c("blabla kw10", "blabla kw15","blabla kw 1", 
                                   "blabla kw13", "blabla kw7", "kw2 bla", "kw8 blabla","bla kw11 bla", 
                                   "blabla kw10","blakw 9 kw", "blablakw4", "blakw 1bla"),
                 "Keyword" = c("kw10", "kw15", "kw 1", "kw13", "kw7", "kw2", "kw8", "kw11", "kw10", "kw 9 kw", "kw4", "kw 1"))

请您为此提出任何解决方案吗?

已编辑:

keywords2 向量和 df2 数据框的可重现示例:

keywords2 <- c("cartucho", "MOLDE", "FILTRO", "BOMBA", "MOTOR")

df2 <- data.frame("Description" = c("CULATA PARA MOTOR", "BOMBA CENTRIFUGA PARA LIQUIDOS", 
    " CARTUCHO FILTRANTE", "APARATO FILTRO MONITOR", "MOLDES PARA QUESO", 
    "BOMBA PERISTALTICA", "MOLDE CON TAPA Y DESUERADOR", 
    "APARATO FILTRO DE MEMBRANA", "BOMBA DE VACIO"),
              "Keyword" = NA)

预期结果:

    df2 <- data.frame("Description" = c("CULATA PARA MOTOR", "BOMBA CENTRIFUGA PARA LIQUIDOS", 
" CARTUCHO FILTRANTE", "APARATO FILTRO MONITOR", "MOLDES PARA QUESO", 
"BOMBA PERISTALTICA", "MOLDE CON TAPA Y DESUERADOR", 
"APARATO FILTRO DE MEMBRANA", "BOMBA DE VACIO"),
"Keyword" = c("MOTOR", "BOMBA", "cartucho", "FILTRO", "MOLDE", "BOMBA", "MOLDE", "FILTRO", "BOMBA")

【问题讨论】:

    标签: r regex string match


    【解决方案1】:

    我们可以使用str_extract

    library(stringr)
    df$Keyword <- str_extract(df$Description, paste(keywords, collapse='|'))
    df$Keyword
    #[1] "kw10"    "kw15"    "kw 1"    "kw13"    "kw7"     "kw2"     "kw8"    
    #[8] "kw11"    "kw10"    "kw 9 kw" "kw4"     "kw 1"   
    

    更新

    使用新的数据集和关键字,将“keywords2”转换为大写,然后将paste 一起作为pattern 用于str_extract

    str_extract(df2$Description, paste(toupper(keywords2), collapse="|"))
    #[1] "MOTOR"    "BOMBA"    "CARTUCHO" "FILTRO"   "MOLDE"    "BOMBA"    "MOLDE"   
    #[8] "FILTRO"   "BOMBA"   
    

    【讨论】:

    • 感谢您的回答。有没有办法不使用“kw”来做到这一点?在我的真实数据集中,关键字向量的字符串中没有类似的模式。
    • @MaryiaMaziuk 您需要提供一个可重现的小示例来模仿您的原始数据,因为正则表达式匹配基于模式。如果您注意到代码,它是基于提供的“关键字”。假设您只想删除“kw”,然后删除keywords &lt;- gsub("kw", "", keywords) 并在paste 中使用它。但是,尚不清楚您的模式是什么
    • @akrun,如果我在这里打扰你,我很抱歉,我也在努力学习 R。你能不能给我一些建议?我也在看书,也在这里看到 SO 帖子。先生将不胜感激。
    • @akrun 对不起。刚刚在问题中添加了一个示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多