如何从 TDM 中删除 NA 列以进行聚类
how to remove NA columns from TDM for clustering
我正在努力使用 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)
抛出
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) != "")]
,其中 titles.cc
是来自 tm
库 class 的纯语料库对象,用于删除黑色文档。它可能有效,但我的 NA 值在肯定不是空白的文档中。
下面是一些示例数据:
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
如果未删除缺失值,colSums
会生成 NA
(查看 ?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
# ...
我正在努力使用 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)
抛出
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) != "")]
,其中 titles.cc
是来自 tm
库 class 的纯语料库对象,用于删除黑色文档。它可能有效,但我的 NA 值在肯定不是空白的文档中。
下面是一些示例数据:
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
如果未删除缺失值,colSums
会生成 NA
(查看 ?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
# ...