У меня есть задача, которая слишком сложна для моих R-знаний. У меня есть фрейм данных с данными твитов, включая столбец, состоящий из имен пользователей, данных твита и содержимого твита. Это выглядит так: Структура данных
У меня есть словари таких слов, как:
dict <- c("one", "two", "eleven")
Я хочу подсчитать частоту слов, используемых в их твитах, но я хочу сгруппировать их по годам и именам.
Я считаю частоту, используя это:
freq_auth <- tweetsanalysis1 %>% mutate(authority_dic = str_c(str_extract(text, str_c(authority_dic, collapse = '|')))) %>% count(authority_dic, name = 'freq_word') %>% arrange(desc(freq_word))
Он работает так, как должен:
Но это касается всех имен и дат. Как мне посчитать частоту для каждого отдельного имени и разделить ее по годам? Я хочу проанализировать каждое отдельное имя по частоте его слов, а затем добавить имя и дату твита в вывод.
Может быть, разрезать фрейм данных на мелкие кусочки по каждому имени в течение года, а затем провести анализ по каждому имени? Мой набор данных содержит 30 тысяч наблюдений и более 200 отдельных имен, так что это займет много времени.
Надеюсь, мне удалось донести свою мысль. Если нет, просто спросите меня. :) Было бы очень приятно, если бы кто-нибудь мне помог! Заранее спасибо.





Попробуйте group_by() и summarise(), и вы сможете spread() после создать столбец для каждого года.
Посмотрите, работает ли это для вашего:
freq_auth <- tweetsanalysis1 %>%
mutate(authority_dic =str_c(str_extract(text, str_c(authority_dic, collapse = '|')))) %>%
group_by(authority_dic, year, user_username) %>%
summarise(freq_word = n()) %>%
arrange(desc(freq_word)) %>%
spread(year, freq_word)
Просто добавьте переменную user_username в функцию group_by(). Я только что отредактировал авсер
Будьте здоровы! Он отлично работает. Ах, большое спасибо!
Большое спасибо за вашу быструю помощь! Это отлично работает для моего первого выпуска. Теперь мне нужно будет сделать это на индивидуальном уровне. Прямо сейчас он анализирует весь набор данных, и мне нужно, чтобы он также группировал его по индивидуальному имени пользователя. Знаете, как я мог бы это реализовать? Большое спасибо за ваше решение для первой проблемы! Осталось всего 50%!