我有一个具有80.000行(标签组)的DocumentTermMatrix data_tags 和900.000列,因此有900.000个不同的标签。 通过findFreqTerms(data_tags,2),我发现大约462.000个标签是唯一的。
我想做一个函数,其中发生两件事: -删除这462.000列,以便仅保留频率为2或更高的标签; -为已删除的所有唯一标签的每一行创建1个新列(唯一):sum()。
tag1 tag2 tag3 tag4
1 0 0 1 0
2 0 1 0 0
2 1 0 0 0
3 1 0 0 0
4 0 1 0 1
5 1 0 0 0
6 0 1 0 0
例如,标签3和tag4不明确(列中仅出现一次):
tag1 tag2 Uniques
1 0 0 1
2 0 1 0
2 1 0 0
3 1 0 0
4 0 1 1
5 1 0 0
6 0 1 0
预先感谢您的帮助。
答案 0 :(得分:0)
也许下面的工作适合您。
library(slam)
library(tm)
set.seed(0)
terms <- sapply(LETTERS, function(letter) paste(rep.int(letter, 5), collapse = ""))
ndocs <- 5
doc_lengts <- sample(5:10, ndocs, TRUE)
docs <- lapply(doc_lengts, function(doc_len) sample(terms, doc_len, TRUE))
dtm <- DocumentTermMatrix(Corpus(VectorSource(docs)))
as.matrix(dtm)
## delete coloms so that only terms with frequency >= 2 are left
## here the function col_sums from the slam package helps
b <- col_sums(dtm) >= 2
dtm_deleted <- dtm[,!b]
dtm <- dtm[,b]
as.matrix(dtm)
## Uniques columns
as.matrix(dtm_deleted)
row_sums(dtm_deleted > 0)
dtm_new <- cbind(dtm, Uniques = row_sums(dtm_deleted > 0))
colnames(dtm_new)[ncol(dtm_new)] <- "Uniques"
as.matrix(dtm_new)