压缩R中的数据帧

时间:2012-11-15 11:29:04

标签: r

是否有任何方法来压缩R中的数据帧。我有一个外部文件,我想导入到数据框中。但是,由于数据很大,会导致内存错误。虽然我不确定R中的压缩是否有意义,因为它使用RAM内存来创建数据结构,但是如果可以使用与压缩同义的任何内容,它将真正帮助我。

3 个答案:

答案 0 :(得分:1)

data.table包存储的数据类似于数据框,但增加了一些效率,这可能会充分压缩您的数据。

更通用的解决方案是将数据加载到数据库而不是直接加载到R中,然后从数据库中提取所需的部分,sqldf和RSQLite包可能会有所帮助。曾经有一个名为SQLiteDF的软件包使这个过程变得透明(数据在数据库中,但是你在R中有一个看起来和行为像数据框但从数据库中提取数据的对象)。可以通过CRAN获得该软件包的存档副本,但是可能需要一些工作才能使其与最新版本的R一起使用(最新版本的软件包是在2009年)。

评论中提到的CRAN任务视图页面上有其他工具(向下滚动到"大内存和#34;部分),讨论了其他一些可能性以及如何分析大型数据在RAM中。

答案 1 :(得分:1)

如果您的数据框大于ff包可能会帮助您存储较小尺寸的大数据。 尝试查看CRAN上提供的ff包

答案 2 :(得分:0)

也许回答这个问题为时已晚,但是我认为我最好与R共享一些最近的工作,这些工作允许压缩数据帧。当前,R中有一个名为fstLightning 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对象作为普通数据帧处理(据我尝试)。

希望这会有所帮助。