R 计算关键字列表在字符串列中出现的总次数

R 计算关键字列表在字符串列中出现的总次数,r,R,我有一个数据框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"] 如何制作另一个数据框,该数据框存储上一个数据框列

我有一个数据框
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循环来迭代字符串列表,并为原始数据帧中的每个关键字创建一列。然后计算每行中出现的次数,最后将列相加。但是,由于关键字列表非常大,这样做的效率非常低。

我们可以在
关键字列表上使用
sapply
,并使用
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

上述方法将给出包含该关键字的行数。如果您想查找特定关键字在所有语句中出现的总次数,我们可以使用
stru count
from
stringr

sapply(keywords, function(x) sum(stringr::str_count(df$strings, x)))
或者将字符串拆分为单词并计算出现的次数

sapply(keywords, function(x) sum(grepl(x, unlist(strsplit(df$strings, "\\s+")))))
sapply(keywords, function(x) sum(grepl(x, unlist(strsplit(df$strings, "\\s+")))))