R删除数据框中的多个文本字符串

时间:2014-07-09 04:25:16

标签: r keyword gsub

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)

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

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

使用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的anwswer可以更新为:

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