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

时间:2014-07-25 11:59:52

标签: python r excel export-to-excel

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

我尝试了RODBCxlsx包,两者都需要超过5分钟才能导出。我想知道是否还有其他更有效的方法呢?

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

更新01

相当多的建议使用csv,在我的情况下可能不太可能,因为有一个包含自由文本的字段,我无法控制在该字段中输入的字符类型,难以选择分隔符。

更新02

感谢您的建议,但我发现R包只有在数据帧相对较小的情况下才能正常运行,并且对于所有列都是字符的数据帧来说,它甚至都很慢。有什么建议吗?

2 个答案:

答案 0 :(得分:5)

有很多选择:

  1. xlsx与多张表格一起使用(您已经尝试了这个,而且它太慢了,我知道)
  2. 使用write.csv应该更快,并且Excel可以读取
  3. odbcConnectExcel2007
  4. 中使用RODBC
  5. 使用包bigmemory来帮助您管理大型数据框,尤其是如果您可以将其设置为稀疏矩阵
  6. XLConnect适用于this guy同样的问题
  7. 使用RODBCRPostgreSQL等将其写入SQL数据库,然后在Excel中建立与DB的连接。我做了很多。这是related resource
  8. 使用Pandas
  9. 创建tab-delimited文本文件,然后将其导入Excel:write.table (table,sep="\t",quote=FALSE,row.names=FALSE,file=file.name)
  10. 使用fread
  11. 尝试cloud-based solution(我不确定这实际上是否会更快,但它至少是一个时髦的解决方案,具有额外的好处,例如提供安全存储数据的好方法,让您可以在任何计算机上使用Excel查询您需要的任何内容)
  12. RExcel
  13. XLLoop
  14. 最后,这里有a nice little article关于"百万种方式连接R和Excel"虽然我认为我实际上给了你比文章更多的选择,但你可能觉得它很有用。

    我会从最简单的解决方案开始,例如fread,然后如果您仍然无法获得所需的结果,那么就可以使用相对更复杂的解决方案。

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

    Python也能很好地处理这个问题,但R内有很多解决方案,希望你不需要求助于切换语言来写出数据。不过,你可以试试

    1. XlsxWriter处于常量内存模式或
    2. openpyxl

      的优化读者和编写者

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

答案 1 :(得分:-2)

尝试使用openxlsx包非常快。

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

  1. 安装包openxlsx
  2. 加载库openxlsx
  3. 使用write.xlsx()writeData()命令写入xlsx文件
  4. 使用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)`
    

    加尼