繁体   English   中英

将大型R数据集导出到excel的有效方法

[英]Efficient way of exporting large R dataset to excel

作为标题,我有一个大约13000行和255列的数据集(实际上我有255列以上,但是RODBC软件包似乎将导出的列数限制为255,因此我对其进行了一些调整),需要将其导出到xls / xlsx文件。

我尝试了RODBCxlsx软件包,这两个软件包都需要5分钟以上的时间才能导出。 我想知道是否还有其他更有效的方法?

我知道一点点python(使用python连接到Outlook,以便在邮箱中列出电子邮件),如果有使用python进行导出的方法,也很受欢迎。

更新01

建议使用csv的情况很少,在我的情况下可能不太可能,因为有一个包含自由文本的字段,我无法控制在该字段中输入哪种字符,从而很难选择分隔符。

更新02

谢谢您的建议,但我发现R包仅在数据帧相对较小时才是好选择,而对于所有列都是字符的数据帧来说,它甚至很慢。 有什么建议么?

有很多选择:

  1. xlsx与多张工作表一起使用(您已经尝试过,但它太慢了,我知道)
  2. 使用write.csv应该更快,并且可以被Excel读取
  3. 使用odbcConnectExcel2007RODBC
  4. 使用bigmemory软件包可帮助您管理大型数据bigmemory ,尤其是如果您可以将其制成稀疏矩阵时
  5. XLConnect这个有同样问题的人工作
  6. 使用RODBCRPostgreSQL等将其写入SQL RPostgreSQL ,然后在Excel中建立与数据库的连接。 我经常这样做。 这是相关资源
  7. 使用Pandas
  8. 创建一个tab-delimited文本文件,然后将其导入到Excel: write.table (table,sep="\\t",quote=FALSE,row.names=FALSE,file=file.name)
  9. 使用fread
  10. 尝试基于云的解决方案 (我不确定这是否会更快,但这至少是一种具有额外好处的新潮解决方案,例如提供一种安全地存储数据的好方法,并让您从中查询所需内容在任何计算机上使用Excel进行操作)
  11. RExcel
  12. XLLoop

最后,这是一篇不错的小文章 “连接R和Excel的百万种方法”,您可能会发现它很有用,尽管我认为我实际上给了您比文章更多的选择。

我将从最简单的解决方案开始,例如fread ,然后如果仍然没有获得想要的结果的话,就fread相对复杂的解决方案前进。

根据项目的确切性质,您甚至可能会受益于并行性或多核处理。 在大多数情况下,这些操作不会提高您的I / O速度,但是它可以加速在过程中发生的数据的任何处理/转换,从而使整个数据管道更快。

Python也有很好的设备来处理这个问题,但是R内有很多解决方案,希望您不必为了写数据而只用切换语言。 不过,您可以尝试

  1. 恒定内存模式下的XlsxWriter ,或
  2. 优化的openpyxl软件包的读写器

    如果您想尝试基于Python的解决方案。

尝试使用openxlsx包的速度相当快。

https://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf

  1. 安装软件包openxlsx
  2. 加载库openxlsx
  3. 使用write.xlsx()writeData()命令写入xlsx文件

来自openxlsx文档的使用openxlsx库的基本操作的小示例

`## setup a workbook with 3 worksheets
wb <- createWorkbook()
addWorksheet(wb = wb, sheetName = "Sheet 1", gridLines = FALSE)
writeDataTable(wb = wb, sheet = 1, x = iris)
addWorksheet(wb = wb, sheetName = "mtcars (Sheet 2)", gridLines = FALSE)
writeData(wb = wb, sheet = 2, x = mtcars)
addWorksheet(wb = wb, sheetName = "Sheet 3", gridLines = FALSE)
writeData(wb = wb, sheet = 3, x = Formaldehyde)
worksheetOrder(wb)
names(wb)
worksheetOrder(wb) <- c(1,3,2) # switch position of sheets 2 & 3
writeData(wb, 2, 'This is still the "mtcars" worksheet', startCol = 15)
worksheetOrder(wb)
names(wb) ## ordering within workbook is not changed
saveWorkbook(wb, "worksheetOrderExample.xlsx", overwrite = TRUE)
worksheetOrder(wb) <- c(3,2,1)
saveWorkbook(wb, "worksheetOrderExample2.xlsx", overwrite = TRUE)`

加尼

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM