我有一个数据框df
,其中包含名为strings
的列。此列中的值是一些句子。
例如:
id strings
1 "I like you"
2 "I like you, too."
3 "I like you so much
4 "I like you very much"
5 "I don't like you"
现在,我有一个关键字列表,
["I", "don't", "like", "you"]
如何制作另一个数据框,该数据框在上一个数据框的列中存储每个关键字的出现总数。
keyword frequency
I 5
don't 1
like 5
you 5
我正在考虑使用for循环来迭代字符串列表,并为原始数据帧中的每个关键字创建一列。然后计算每一行中的出现次数,最后将各列加起来。但是,由于关键字列表很大,因此这样做效率很低。
答案 0 :(得分:1)
我们可以在sapply
的列表上使用keywords
,并使用keywords
计算发生grepl
的行数。
keywords <- c("I", "don't", "like", "you")
stack(sapply(keywords, function(x) sum(grepl(paste0("\\b", x, "\\b"), df$strings))))
# values ind
#1 5 I
#2 1 don't
#3 5 like
#4 5 you
或者采用tidyverse
的方式
library(tidyverse)
tibble(keywords) %>%
mutate(Frequency = map_int(keywords, ~
sum(grepl(paste0("\\b", ., "\\b"), df$strings))))
以上方法将给出其中包含该关键字的行数。如果您想查找某个特定关键字在所有语句中出现的总次数,我们可以使用str_count
stringr
sapply(keywords, function(x) sum(stringr::str_count(df$strings, x)))
或将字符串分成单词并计算出现次数
sapply(keywords, function(x) sum(grepl(x, unlist(strsplit(df$strings, "\\s+")))))