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

时间:2019-04-27 01:41:56

标签: 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"]

如何制作另一个数据框,该数据框在上一个数据框的列中存储每个关键字的出现总数。

keyword      frequency
  I               5
  don't           1
  like            5
  you             5

我正在考虑使用for循环来迭代字符串列表,并为原始数据帧中的每个关键字创建一列。然后计算每一行中的出现次数,最后将各列加起来。但是,由于关键字列表很大,因此这样做效率很低。

1 个答案:

答案 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+")))))