Проблема в том, что ui = unique(dtm$i)
удаляет несколько документов (я не знаю, почему вы это делаете, поэтому я не буду комментировать эту часть).Таким образом, ваша тета не имеет того же количества строк, что и данные.Мы можем решить эту проблему, сохранив только те строки, которые все еще находятся в тэте:
library("dplyr")
library("reshape2")
library("ggplot2")
tweets_clean <- tweets %>%
mutate(id = rownames(.)) %>%
filter(id %in% rownames(theta)) %>% # keep only rows still in theta
cbind(theta) %>% # now we can attach the topics to the data.frame
mutate(year = format(date, "%Y")) # make year variable
Затем я использовал dplyr
функции для агрегации, поскольку я думаю, что это облегчает чтение кода:
tweets_clean_yearly <- tweets_clean %>%
group_by(year) %>%
summarise_at(vars(as.character(1:7)), funs(mean)) %>%
melt(id.vars = "year")
Тогда мы можем построить это:
ggplot(tweets_clean_yearly, aes(x = year, y = value, fill = variable)) +
geom_bar(stat = "identity") +
ylab("proportion")
Примечание : я проверял, есть ли тета и твитыбыли действительно те же документы с:
tweets_clean <- tweets %>%
mutate(id = rownames(.)) %>%
filter(id %in% rownames(theta))
all.equal(tweets_clean$id, rownames(theta))