是否有任何方法来压缩R中的数据帧。我有一个外部文件,我想导入到数据框中。但是,由于数据很大,会导致内存错误。虽然我不确定R中的压缩是否有意义,因为它使用RAM内存来创建数据结构,但是如果可以使用与压缩同义的任何内容,它将真正帮助我。
答案 0 :(得分:1)
data.table
包存储的数据类似于数据框,但增加了一些效率,这可能会充分压缩您的数据。
更通用的解决方案是将数据加载到数据库而不是直接加载到R中,然后从数据库中提取所需的部分,sqldf和RSQLite包可能会有所帮助。曾经有一个名为SQLiteDF的软件包使这个过程变得透明(数据在数据库中,但是你在R中有一个看起来和行为像数据框但从数据库中提取数据的对象)。可以通过CRAN获得该软件包的存档副本,但是可能需要一些工作才能使其与最新版本的R一起使用(最新版本的软件包是在2009年)。
评论中提到的CRAN任务视图页面上有其他工具(向下滚动到"大内存和#34;部分),讨论了其他一些可能性以及如何分析大型数据在RAM中。
答案 1 :(得分:1)
如果您的数据框大于ff包可能会帮助您存储较小尺寸的大数据。 尝试查看CRAN上提供的ff包
答案 2 :(得分:0)
也许回答这个问题为时已晚,但是我认为我最好与R共享一些最近的工作,这些工作允许压缩数据帧。当前,R中有一个名为fst
(Lightning Fast Serialization of Data Frames for R)
的程序包,您可以在其中为数据帧创建压缩的fst
对象,详细说明请参见{{3} },但我将简要说明如何使用它以及fst
对象占用多少空间。首先,让我们创建一个包含一些数据的数据框,然后检查该数据框的大小,如下所示:>
install.packages("pryr") # for object_size()
library(pryr)
N <- 1000 * 8
M <- 100
df <- data.frame(A = c(rep(strrep("A", M), N), rep(strrep("B", N), N)))
object_size(df)
# 73.3 kB
现在,让我们将该数据帧转换为fst
对象,如下所示:
install.packages("fst") #install the package
library(fst) #load the package
path <- paste0(tempfile(), ".fst") #create a temporary '.fst' file
write_fst(df, path) #write the dataframe into the '.fst' file
ft <- fst(path) #load the data as an fst object
object_size(ft)
# 2.14 kB
创建的.fst
文件的磁盘空间为434 bytes
。您可以将ft
对象作为普通数据帧处理(据我尝试)。
希望这会有所帮助。