将大型R数据集导出为ex​​cel的有效途径

作为标题,我有一个约13000行和255列的数据集(实际上我有超过255列,但RODBC包似乎限制列的数量导出到255,所以我修剪了一下),需要导出到XLS / xlsx文件。

我尝试了RODBCxlsx软件包,两者都需要5分钟以上才能出口。 我想知道有没有其他更有效的方法呢?

我知道一点python(使用python连接到outlook邮箱列表电子邮件),如果有办法使用python导出,而且也欢迎。

更新01

不lessbuild议使用csv,在我的情况下可能不太可能,因为有一个包含自由文本的字段,我无法控制在该字段中input什么样的字符,难以select分隔符。

更新02

谢谢你的build议,但是我发现R包只有在dataframe相对较小的情况下才是正确的,而且对于所有列都是字符的dataframe来说,速度更慢。 有什么build议么?

有很多select:

  1. 使用xlsx与多张表单(我已经试过了,速度太慢了,我知道)
  2. 使用write.csv应该更快,Excel可读
  3. odbcConnectExcel2007内使用RODBC
  4. 使用包bigmemory来帮助您pipe理大型数据bigmemory ,特别是如果您可以将其设置为稀疏matrix
  5. XLConnect哪个为这个人工作的同样的问题
  6. 使用RODBCRPostgreSQL等将其写入SQL RPostgreSQL ,然后在Excel中build立连接。 我做了很多。 这是一个相关的资源 。
  7. 使用Pandas
  8. 创buildtab-delimited文本文件,然后将其导入Excel: write.table (table,sep="\t",quote=FALSE,row.names=FALSE,file=file.name)
  9. 使用fread
  10. 尝试一个基于云的解决scheme (我不确定这是否会更快,但它至less是一个时尚的解决scheme,具有额外的好处,如提供一个安全地存储您的数据的好方法,并让您查询任何您需要的它在任何计算机上使用Excel)
  11. RExcel
  12. XLLoop

最后,这里有一篇关于“百万种连接R和Excel”的小文章 ,你可能会觉得有用,不过我想我已经给了你比文章更多的select了。

我会从最简单的解决scheme开始,比如fread ,然后如果你还没有得到你想要的结果,那么就用相对复杂的解决scheme。

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

Python也可以很好的处理这个问题,但是R有很多解决scheme,希望你不需要为了写出数据而转换语言。 不过,你可以试试

  1. XlsxWriter在常量内存模式下,或
  2. 优化的读者和作者的openpyxl

    如果你想尝试一个基于Python的解决scheme。

尽量使用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)` 

加尼