如何从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)
我在 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)