【问题标题】:remove list of strings from string column in R从R中的字符串列中删除字符串列表
【发布时间】:2020-12-14 15:47:21
【问题描述】:

我有一个这样的数据框:

df = data.frame('name' = c('California parks', 'bear lake', 'beautiful tree house', 'banana plant'), 'extract' = c('parks', 'bear', 'tree', 'plant'))

如何从名称列中删除“提取”列的字符串以获得以下结果:

name_new = California, lake, beautiful house, banana

我怀疑这需要 str_extract 和 lapply 的组合,但可以完全弄清楚。

谢谢!

【问题讨论】:

    标签: r string dataframe


    【解决方案1】:

    str_remove 或 str_replace 针对 string 和 pattern 进行了矢量化处理。因此,如果我们有两列,只需将这些列 'name'、'extract' 作为 string、pattern 传递,以逐元素删除 'name' 列中的子字符串。一旦我们删除了这些子字符串,就有可能在其之前或之后有空格,可以将其删除或替换为str_replace 和trimws(以删除前导/滞后空格)

    library(dplyr)
    library(stringr)
    df %>% 
        mutate(name_new = str_remove(name, extract),
            name_new = str_replace_all(trimws(name_new), "\\s{2,}", " "))
    #                 name extract        name_new
    #1     California parks   parks      California
    #2            bear lake    bear            lake
    #3 beautiful tree house    tree beautiful house
    #4         banana plant   plant          banana
    

    【讨论】:

      【解决方案2】:

      使用gsub + Vectorize 的基本 R 选项

      within(df,name_new <- Vectorize(gsub)(paste0("\\s",extract,"\\s")," ",name))
      

      给了

                        name extract        name_new
      1     California parks   parks      California
      2            bear lake    bear            lake
      3 beautiful tree house    tree beautiful house
      4         banana plant   plant          banana
      

      【讨论】:

        猜你喜欢
        • 2021-06-24
        • 2011-04-20
        • 1970-01-01
        • 1970-01-01
        • 2015-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多