我得到了包含一组较短文本的数据框。我也有一个包含关键字列表的向量。我想添加一个新列,其中每个文本匹配的关键字都作为值添加到新列中。
我添加代码以创建数据框的演示版。
id <- c(1,2,4,5,6,7)
full_text <- c("I like banana", "I ate an apple", "I prefer bananas and apples", "Grapes", "My applepie is tasty", "Fruitsalad")
df <- data.frame(id = id,full_text = full_text)
这给出了以下数据帧:
id full_text
1 1 I like banana
2 2 I ate an apple
3 4 I prefer bananas and apples
4 5 Grapes
5 6 My applepie is tasty
6 7 Fruitsalad
然后,我有一个包含一些单词的向量。见下文:
keywords <- c("banana", "apple", "grape")
在实践中,我要确定谁都有一个或多个观察keywords
他们 df$full_text
。如果df$full_text
包含一个或多个单词,我想将这些关键字添加到名为的新列中key_word
。这应该提供一个类似于以下数据帧:
id full_text key_word
1 1 I like banana banana
2 2 I ate an apple apple
3 4 I prefer bananas and apples banana, apple
4 5 Grapes grape
5 6 My applepie is tasty apple
6 7 Fruitsalad
我最初的策略是尝试与一起使用ifelse
,grepl
但无法使其正常工作。
使用stringr
,str_replace_all
您可以执行以下操作:
df$keyword <- str_extract_all(tolower(df$full_text),paste(keywords,collapse = "|")) %>%
lapply(.,function(x) paste(x,collapse = ", ")) %>%
unlist()
paste(keywords,collapse = "|")
是用正则表达式表示“查找我的向量的任何单词”:您常|
说或
paste(keywords,collapse = "|")
[1] "banana|apple|grape"
str_extract_all
为您提供一个列表,其中列出了它为向量的每个条目找到的各种条目:
str_extract_all(tolower(df$full_text),paste(keywords,collapse = "|"))
[[1]]
[1] "banana"
[[2]]
[1] "apple"
[[3]]
[1] "banana" "apple"
[[4]]
[1] "grape"
[[5]]
[1] "apple"
[[6]]
character(0)
因此,如果将它们与function(x) paste(x,collapse = ", ")
和unlist
列表合并在一起,则可以获得所需的内容。我加了tolower
,因为你想认识Grape
与grape
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句