如何从R中一列的列表中删除单词

how to delete words from a list in a column in R

我在 table 中有一列标题,我想删除单独 table/vector 中列出的所有单词。

例如,table 个标题:

"Lorem ipsum dolor"
"sit amet, consectetur adipiscing"
"elit, sed do eiusmod tempor"
"incididunt ut labore"
"et dolore magna aliqua."

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

输出:

"ipsum dolor"
"sit amet, consectetur adipiscing"
", sed do eiusmod tempor"
"incididunt ut labore"
"et magna aliqua."

被列入黑名单的词可以出现多次。

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

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."

首先读取数据:

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)

您也可以使用 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."               

tm-Package 为此实现了一个功能: 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)