【问题标题】:R remove multiple text strings in data frameR删除数据框中的多个文本字符串
【发布时间】:2014-08-29 23:44:57
【问题描述】:

R 新手。我希望从数据框中删除某些单词。由于有多个单词,我想将此单词列表定义为字符串,并使用 gsub 删除。然后转换回数据框并保持相同的结构。

wordstoremove <- c("ai", "computing", "ulitzer", "ibm", "privacy", "cognitive")

a
id                text time      username          
 1     "ai and x"        10     "me"          
 2     "and computing"   5      "you"         
 3     "nothing"         15     "everyone"     
 4     "ibm privacy"     0      "know"        

我在想这样的事情:

a2 <- apply(a, 1, gsub(wordstoremove, "", a)

但在转换回数据框之前,这显然不起作用。

【问题讨论】:

    标签: r keyword gsub


    【解决方案1】:
    wordstoremove <- c("ai", "computing", "ulitzer", "ibm", "privacy", "cognitive")
    
    (dat <- read.table(header = TRUE, text = 'id text time username
    1 "ai and x" 10 "me"
    2 "and computing" 5 "you"
    3 "nothing" 15 "everyone"
    4 "ibm privacy" 0 "know"'))
    
    #   id          text time username
    # 1  1      ai and x   10       me
    # 2  2 and computing    5      you
    # 3  3       nothing   15 everyone
    # 4  4   ibm privacy    0     know
    
    (dat1 <- as.data.frame(sapply(dat, function(x) 
      gsub(paste(wordstoremove, collapse = '|'), '', x))))
    
    #   id    text time username
    # 1  1   and x   10       me
    # 2  2    and     5      you
    # 3  3 nothing   15 everyone
    # 4  4            0     know
    

    【讨论】:

      【解决方案2】:

      使用dplyr::mutate() 和stringr::str_remove_all() 的另一个选项:

      library(dplyr)
      library(stringr)
      
      dat <- dat %>%   
        mutate(text = str_remove_all(text, regex(str_c("\\b",wordstoremove, "\\b", collapse = '|'), ignore_case = T)))
      

      由于小写的“ai”很容易成为较长单词的一部分,因此要删除的单词与\\b 绑定,因此它们不会从开头、中间或结尾或其他单词中删除。

      搜索模式也用regex(pattern, ignore_case = T) 包裹,以防文本字符串中的某些单词大写。

      str_replace_all() 如果您想用其他内容替换单词而不只是删除它们,则可以使用它们。 str_remove_all() 只是 str_replace_all(string, pattern, '') 的别名。

      rawr的回答可以更新为:

      dat1 <- as.data.frame(sapply(dat, function(x) 
        gsub(paste0('\\b', wordstoremove, '\\b', collapse = '|'), '', x, ignore.case = T)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-05
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-14
        相关资源
        最近更新 更多