R:提取并粘贴关键字匹配项
R: extract and paste keyword matches
我是 R 的新手,一直在努力解决这个问题。我想创建一个新列,检查列 'text' 中是否存在一组单词 ("foo"、"x"、"y"),然后将该值写入新专栏。
我有一个如下所示的数据框:a->
id text time username
1 "hello x" 10 "me"
2 "foo and y" 5 "you"
3 "nothing" 15 "everyone"
4 "x,y,foo" 0 "know"
正确的输出应该是:
a2 ->
id text time username keywordtag
1 "hello x" 10 "me" x
2 "foo and y" 5 "you" foo,y
3 "nothing" 15 "everyone" 0
4 "x,y,foo" 0 "know" x,y,foo
我有这个:
df1 <- data.frame(text = c("hello x", "foo and y", "nothing", "x,y,foo"))
terms <- c('foo', 'x', 'y')
df1$keywordtag <- apply(sapply(terms, grepl, df1$text), 1, function(x) paste(terms[x], collapse=','))
这行得通,但是当我的 needleList 包含 12k 个单词并且我的文本有 155k 行时 R 崩溃了。有没有一种不会使 R 崩溃的方法?
这是您所做的以及评论中建议的内容的变体。这使用 dplyr
和 stringr
。可能有更有效的方法,但这可能不会使您的 R 会话崩溃。
library(dplyr)
library(stringr)
terms <- c('foo', 'x', 'y')
term_regex <- paste0('(', paste(terms, collapse = '|'), ')')
### Solution: this uses dplyr::mutate and stringr::str_extract_all
df1 %>%
mutate(keywordtag = sapply(str_extract_all(text, term_regex), function(x) paste(x, collapse=',')))
# text keywordtag
#1 hello x x
#2 foo and y foo,y
#3 nothing
#4 x,y,foo x,y,foo
我是 R 的新手,一直在努力解决这个问题。我想创建一个新列,检查列 'text' 中是否存在一组单词 ("foo"、"x"、"y"),然后将该值写入新专栏。
我有一个如下所示的数据框:a->
id text time username
1 "hello x" 10 "me"
2 "foo and y" 5 "you"
3 "nothing" 15 "everyone"
4 "x,y,foo" 0 "know"
正确的输出应该是:
a2 ->
id text time username keywordtag
1 "hello x" 10 "me" x
2 "foo and y" 5 "you" foo,y
3 "nothing" 15 "everyone" 0
4 "x,y,foo" 0 "know" x,y,foo
我有这个:
df1 <- data.frame(text = c("hello x", "foo and y", "nothing", "x,y,foo"))
terms <- c('foo', 'x', 'y')
df1$keywordtag <- apply(sapply(terms, grepl, df1$text), 1, function(x) paste(terms[x], collapse=','))
这行得通,但是当我的 needleList 包含 12k 个单词并且我的文本有 155k 行时 R 崩溃了。有没有一种不会使 R 崩溃的方法?
这是您所做的以及评论中建议的内容的变体。这使用 dplyr
和 stringr
。可能有更有效的方法,但这可能不会使您的 R 会话崩溃。
library(dplyr)
library(stringr)
terms <- c('foo', 'x', 'y')
term_regex <- paste0('(', paste(terms, collapse = '|'), ')')
### Solution: this uses dplyr::mutate and stringr::str_extract_all
df1 %>%
mutate(keywordtag = sapply(str_extract_all(text, term_regex), function(x) paste(x, collapse=',')))
# text keywordtag
#1 hello x x
#2 foo and y foo,y
#3 nothing
#4 x,y,foo x,y,foo