我是R编程语言的初学者,目前正在尝试从事一个项目.有一个巨大的文档术语矩阵(DTM),我想将其转换为数据框架.但是由于功能的限制,我无法这样做.
我一直在使用的方法是先将其转换为矩阵,然后将其转换为数据帧.
DF <- data.frame(as.matrix(DTM), stringsAsFactors=FALSE)
Run Code Online (Sandbox Code Playgroud)
它与小尺寸DTM完美配合.但是当DTM太大时,我无法将其转换为矩阵,产生如下所示的错误:
错误:无法分配大小为2409.3 Gb的向量
尝试在网上看几天,但我无法找到解决方案.如果有人能够建议将DTM转换为DF的最佳方式(特别是在处理大尺寸DTM时),那将非常感激.
在tidytext包中实际上有一个功能就是这样做.尝试使用tidy将返回一个tibble 的函数(基本上是一个很好的打印的花哨的数据帧).关于整洁功能的好处是它会StringsAsFactors=FALSE通过不将字符串转换为因子来处理麻烦的问题,它将很好地处理DTM的稀疏性.
as.matrix正在尝试将您的DTM转换为非稀疏矩阵,其中包含每个文档和术语的条目,即使该术语在该文档中出现0次,这会导致您的内存使用为气球.tidy`会将其转换为数据框,其中每个文档只有在其中找到的术语的计数.
在你的例子中,你会跑
library(tidytext)
DF <- tidy(DTM)
Run Code Online (Sandbox Code Playgroud)
甚至还有关于如何使用的一个小插曲tidytext包(意味着在tidyverse工作)在这里.
小智 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(...)-> https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.data.frame.html
data.frame(...)-> https://stat.ethz.ch/R-manual/R-devel/library/base/html/data.frame.html