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)
但很明显,在转换回数据框之前,这不起作用。
答案 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)))