我需要将R中的一些大dataframes
保存到硬盘中。由于每个DF
的尺寸非常大(〜> 50K行和> 50列)并且我有超过200K的尺寸,我想压缩保存它们以节省一些硬盘空间。
到目前为止,我尝试了几种类型,例如.CSV
,rds
(compress = "gzip"
),分别需要〜60MB
和20 MB
。我想知道是否有一些替代方法可以更有效地压缩它们。
答案 0 :(得分:4)
除非您的数据有一些非常特殊的结构,否则我认为您不能比saveRDS()
做得更好。通过使用其中一种替代压缩选项,您可以获得轻微(~10%)的优势;下面,我使用xz
压缩而不是gzip
从12.7M变为10.5M(在我的示例中,CSV为43M)。
设置示例:
set.seed(101)
m <- matrix(runif(5e4*50),ncol=50)
(这是一个矩阵,而不是数据框:我怀疑它会有很大的不同,但你可以尝试。)
写CSV文件:
write.csv(m,file="tmp.csv")
s_csv <- file.info("tmp.csv")["size"]
尝试压缩选项:
c_opts <- c("gzip","bzip2","xz")
ss <- sapply(c_opts,
function(c) {
saveRDS(m,compress=c,file="tmp.rds")
return(file.info("tmp.rds")["size"])
})
合并,转换为MB:
unlist(c(csv=s_csv,ss))/2^20
## csv.size gzip.size bzip2.size xz.size
## 43.28464 12.69796 11.32605 10.46269