Использование lapply для матрицы терминов документов для расчета частоты слов
Учитывая три TermDocumentMatrix, text1, text2 и text3, я хотел бы вычислить частоту слов для каждого из них во фрейм данных и связать все фреймы данных. Три образца - у меня есть сотни на самом деле, поэтому мне нужно это функционализировать.
Легко вычислить слово freq для одного TDM:
apply(x, 1, sum)
или же
rowSums(as.matrix(x))
Я хочу составить список TDM:
tdm_list <- Filter(function(x) is(x, "TermDocumentMatrix"), mget(ls()))
и рассчитать слово freq для каждого и поместить его во фрейм данных:
data.frame(lapply(tdm_list, sum)) # this is wrong. it simply sums frequency of all words instead of frequency by each word.
а затем связать все это:
do.call(rbind, df_list)
Я не могу понять, как использовать lapply на TDM для вычисления частоты слов.
Добавление образцов данных для работы с:
require(tm)
text1 <- c("apple" , "love", "crazy", "peaches", "cool", "coke", "batman", "joker")
text2 <- c("omg", "#rstats" , "crazy", "cool", "bananas", "functions", "apple")
text3 <- c("Playing", "rstats", "football", "data", "coke", "caffeine", "peaches", "cool")
tdm1 <- TermDocumentMatrix(Corpus(VectorSource(text1)))
tdm2 <- TermDocumentMatrix(Corpus(VectorSource(text2)))
tdm3 <- TermDocumentMatrix(Corpus(VectorSource(text3)))
1 ответ
Хорошо, я думаю, что у меня это есть, и это действительно может помочь кому-то, кто хочет сделать то же самое. Это было просто в конце.
combineddf <- do.call(rbind, lapply(tdm_list, function (x) {
data.frame(apply(x, 1, sum))
}))
вышеупомянутый берет список TermDocumentMatrices и дает количество слов для всех их в dataframes и rbinding все.