R中的DocumentTermMatrix - 每行的唯一字的总和

问题描述 投票:0回答:1

我有一个DocumentTermMatrix data_tags,包含80.000行(标签组)和900.000列,因此有900,000个不同的标签。通过findFreqTerms(data_tags,2),我发现大约462.000个标签是唯一的。

我想创建一个有两件事情发生的函数: - 删除这些462.000列,这样只剩下频率为2或更多的标签; - 创建1个新列(Uniques):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和标记4是唯一的(仅在列中出现一次):

     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    

在此先感谢您的帮助。

r matrix text-mining
1个回答
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)
© www.soinside.com 2019 - 2024. All rights reserved.