将文档术语矩阵(DTM)转换为数据框(R编程)

时间:2017-05-17 01:35:34

标签: r

我是R编程语言的初学者,目前正在尝试开发一个项目。 这是一个巨大的文档术语矩阵(DTM),我想将其转换为数据框架。 但是由于功能的限制,我无法这样做。

我一直在使用的方法是先将其转换为矩阵,然后将其转换为数据帧。

DF <- data.frame(as.matrix(DTM), stringsAsFactors=FALSE)

它与小尺寸DTM完美配合。但是当DTM太大时,我无法将其转换为矩阵,产生如下所示的错误:

  

错误:无法分配大小为2409.3 Gb的矢量

尝试在线查看几天,但我无法找到解决方案。 如果有人能够建议将DTM转换为DF的最佳方式(特别是在处理大尺寸DTM时),真的很感激。

2 个答案:

答案 0 :(得分:6)

tidytext package中,实际上有一个功能可以做到这一点。尝试使用tidy函数,该函数将返回一个tibble(基本上是一个可以很好地打印的奇特数据帧)。关于整洁功能的好处是,它会通过不将字符串转换为因子来处理讨厌的StringsAsFactors=FALSE问题,并且它将很好地处理DTM的稀疏性。

as.matrix正在尝试将您的DTM转换为非稀疏矩阵,其中包含每个文档和术语的条目,即使该术语在该文档中出现0次,这会导致您的内存使用为气球。 tidy`会将其转换为数据框,其中每个文档只有在其中找到的术语的计数。

在您的示例中,您可以

运行
library(tidytext)
DF <- tidy(DTM)

甚至还有一个关于如何使用tidytext包(意味着在tidyverse中工作)here的插图。

答案 1 :(得分:1)

as.data.frame(as.matrix(DTM), stringsAsFactors=False)而不是data.frame(as.matrix(DTM), stringsAsFactors=False)可能会成功。

API文档指出as.data.frame()只是将矩阵强制转换为数据框,而data.frame()则从输入中创建新的数据框。

as.data.frame(...) - &gt; https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.data.frame.html

data.frame(...) - &gt; https://stat.ethz.ch/R-manual/R-devel/library/base/html/data.frame.html