1

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

4

3 回答 3

3

也许现在回答这个问题为时已晚,但我想我最好分享一些最近在 R 中允许压缩数据帧的工作。目前,R 中有一个名为fst( Lightning Fast Serialization of Data Frames for R) 的包,您可以在其中为您的数据框创建压缩fst对象。详细的解释可以在fst-package 手册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对象作为普通数据框处理(据我尝试)。

希望这可以帮助。

于 2018-12-14T15:59:21.003 回答
1

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

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

评论中提到的 CRAN 任务视图页面上还有其他工具(向下滚动到“大内存”部分),它们讨论了其他一些可能性以及如何分析在 RAM 中使用的大数据。

于 2012-11-15T16:18:12.497 回答
1

如果你有一个比 ff 包更大的数据框,它可能会帮助你以更小的尺寸存储你的大数据。尝试查看 CRAN 上可用的 ff 包

于 2015-04-06T07:09:47.263 回答