1

我在表格中有一列标题,并且想删除单独表格/向量中列出的所有单词。

例如,标题表:

“Lorem ipsum dolor”
“sit amet, consectetur adipiscing”
“elit, sed do eiusmod tempor”
“incidudunt ut labore”
“et dolore magna aliqua”。

待删除:c("Lorem", "dolore", "elit")

输出:

“ipsum dolor”
“sit amet, consectetur adipiscing”
“, sed do eiusmod tempor”
“incidudunt ut labore”
“et magna aliqua”。

列入黑名单的单词可能会出现多次。

tm 包具有此功能,但在应用于 wordcloud 时。我需要的是保持列完好无损,而不是将所有行连接成一个字符串。当给定一组值作为模式时,正则表达式函数 (gsub()) 似乎不起作用。Oracle SQL 解决方案也很有趣。

4

4 回答 4

3
lorem <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")

to.delete <- c("Lorem", "dolore", "elit")

output <- lorem
for (i in to.delete) {
  output <- gsub(i, "", output)
}

这给出了:

[1] " ipsum dolor"                     "sit amet, consectetur adipiscing"
[3] ", sed do eiusmod tempor"          "incididunt ut labore"            
[5] "et  magna aliqua."
于 2015-12-08T14:59:14.623 回答
2

首先读取数据:

dat <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")
todelete <- c("Lorem", "dolore", "elit")

我们可以通过一些巧妙的粘贴来避免循环。这|是一个或所以我们可以粘贴它,允许我们删除任何循环:

gsub(paste0(todelete, collapse = "|"), "", dat)
于 2015-12-08T15:00:48.120 回答
2

你也可以使用stri_replace_all_fixed

library(stringi)
lorem <- c("Lorem ipsum dolor",
           "sit amet, consectetur adipiscing",
           "elit, sed do eiusmod tempor",
           "incididunt ut labore",
           "et dolore magna aliqua.")

to.delete <- c("Lorem", "dolore", "elit")

#just a simple function call
library(stringi)
stri_replace_all_fixed(lorem, to.delete, '')

输出:

[1] " ipsum dolor"                     "sit amet, consectetur adipiscing" ", sed do eiusmod tempor"         
[4] "incididunt ut labore"             "et  magna aliqua."               
于 2015-12-08T15:10:10.967 回答
2

-Package 具有为此实现的tm功能: tm:::removeWords.character

它的实现如下:

foo <- function(x, words){
  gsub(sprintf("(*UCP)\\b(%s)\\b", paste(sort(words, decreasing = TRUE), 
                                         collapse = "|")), "", x, perl = TRUE)
}

这给了你

gsub("(*UCP)\\b(Lorem|elit|dolore)\\b","", x, perl = TRUE)
于 2015-12-08T15:12:40.440 回答