Мне не ясно, почему вы после цикла for.Есть несколько подходов, которые вы можете использовать здесь.Кстати, вы всегда должны указывать пакеты, которые вы используете в вашем примере.
Во-первых, давайте создадим воспроизводимый пример.Мы будем вызывать функцию wordcount
из пространства имен ngram без добавления пакета.
library(tidyverse)
df <- data.frame(Speaker = rep(c("John", "Bob", "Doe"),2),
Words = NA)
df[df$Speaker == "John",]$Words <- "All right Jim. Your quarterlies look very good"
df[df$Speaker == "Bob",]$Words <- "You all look good, except for John"
df[df$Speaker == "Doe",]$Words <- "John, your performance is terrible"
Во-первых, мы можем просто вернуть агрегированные суммы, используя tapply
, и привести в data.frame на лету.
data.frame(Speaker = sort(unique(df$Speaker)),
total_words = as.numeric(tapply(df$Words,
df$Speaker, ngram::wordcount)) )
Используя конвейерный подход, мы можем последовать вашему примеруи вернуть общее количество слов для одного говорящего
df %>%
filter(Speaker == "John") %>%
summarize(total_words = ngram::wordcount(Words)) %>%
as.numeric()
Или, используя конвейерный подход, общее количество слов для всех говорящих в виде data.frame
df %>%
group_by(Speaker) %>%
summarize(total_words = ngram::wordcount(Words)) %>%
as.data.frame()