У меня есть data.table DT_words (большое измерение):
DT_words <- data.table(word = c('word1', 'word2', 'word3','word4'))
У меня есть еще одна data.table DT_strings, которая содержит столбец с большим количеством строк
DT_strings <- data.table(string = c('string1 made of word1', 'string2 made of word2 and word2 and word3 and word1ly', 'string3 made of word1 and word2'))
для каждого слова в DT_word я хотел бы подсчитать общее количество вхождений во всех строках в DT_string и сохранить это значение в виде столбца в DT_word.Я использую циклы for, и это выглядит ужасно.
Я пытался использовать lapply и mapply, но безрезультатно, поскольку функция требует внутреннего ввода.
Вот цикл forэти слова (но это очень долго и некрасиво)
require(stringr)
for (i in 1:nrow(DT_words))
{
DT_words$word_count[i] <- sum(str_count(DT_strings$string,
paste0(c("\\b("),paste(DT_words[i, .(word)]),c(")\\b"))))
}
Я знаю, что формат - это скорее data.frame, но поскольку я использую цикл, это не имеет значения,Является ли?В любом случае, мне было интересно, смогу ли я использовать apply в data.table и избавиться от этого уродства.
Желания будут:
> DT_words
word word_count
1: word1 2
2: word2 3
3: word3 1
4: word4 0
Редактировать: я отредактировал DT_strings, чтобы включить больше примеровсоответствия слов.Меня интересует только сопоставление целого слова, поэтому синтаксис регулярных выражений должен быть как-то включен.