рассчитать общее количество появлений списка ключевых слов в строковом столбце - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть фрейм данных 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 Ответ

1 голос
/ 27 апреля 2019

Мы могли бы использовать 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+")))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...