0

我正在努力使用 TDM NA 值来提交集群。最初我已经设置:

titles.tdm <- as.matrix(TermDocumentMatrix(titles.cw, control = list(bounds = list(global = c(10,Inf)))))

titles.sc <- scale(na.omit(titles.tdm))

得到了 418 个术语和 6955 个文档的矩阵。此时执行: titles.km <- kmeans(titles.sc, 2)throws Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)

当我决定通过以下方式删除这些值时:

titles.sf <- titles.sc[,colSums(titles.sc) > 0]

我有 4695 个文档的矩阵,但应用该kmeans函数仍然会引发此错误。当我查看titles.sf变量时,仍然有具有 NA 值的列(文档)。我搞砸了,不知道做错了什么。如何删除那些文件?

早些时候,我已经应用titles.cw <- titles.cc[which(str_trim(titles.cc$content) != "")]where titles.ccis pure Corpus object from tmlibrary 类来删除黑色文档。它可能有效,但我的 NA 值在肯定不是空白的文档中。

4

1 回答 1

2

以下是一些示例数据:

set.seed(123)
titles.sc <- matrix(1:25,5,5)
titles.sc[sample(length(titles.sc),5)]<-NA 
titles.sc
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    6   11   16   21
# [2,]    2    7   12   17   NA
# [3,]    3   NA   13   18   23
# [4,]    4    9   14   NA   24
# [5,]    5   NA   15   NA   25

kmeans抛出你的错误

kmeans(titles.sc, 2)
# Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)

因为您的列子集可能不是您所期望的:

colSums(titles.sc) > 0
# [1] TRUE   NA TRUE   NA   NA

colSumsNA如果未删除缺失值,则生成(查看 下的帮助文件?colSums)。除其他外,你可以做

colSums(is.na(titles.sc)) == 0
# [1]  TRUE FALSE  TRUE FALSE FALSE

或者

!is.na(colSums(titles.sc) > 0)
# [1]  TRUE FALSE  TRUE FALSE FALSE

现在,它起作用了:

titles.sf <- titles.sc[,colSums(is.na(titles.sc)) == 0,drop=F]
kmeans(titles.sf,2)
# K-means clustering with 2 clusters of sizes 2, 3
# ...
于 2017-04-30T23:02:48.437 回答