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

2024-10-03 15:29:53 发布

您现在位置:Python中文网/ 问答频道 /正文

作为标题,我有一个包含大约13000行和255列的数据集(实际上我有超过255列,但是RODBCpackage似乎将导出的列数限制为255列,所以我对其进行了一些修剪),这些数据集需要导出到xls/xlsx文件中。在

我尝试了RODBC和{}包,导出都需要5分钟以上。我想知道有没有其他更有效的方法来做这件事?在

我对python有一点了解(使用python连接到outlook,以便在邮箱中列出电子邮件),如果有办法改用python导出,也很受欢迎。在

更新01

很多人建议使用csv,在我的例子中可能不太可能,因为有一个包含自由文本的字段,我无法控制在该字段中输入什么类型的字符,这使得选择分隔符很困难。在

更新02

感谢您的建议,但是我发现R包只有在dataframe相对较小的情况下才可以使用,而且对于dataframe来说,所有列都是字符的情况下甚至会很慢。有什么建议吗?在


Tags: 文件数据方法标题dataframe情况xlsxxls
2条回答

有很多选择:

  1. xlsx与多张工作表一起使用(您已经尝试过了,但它太慢了,我知道)
  2. 使用write.csv应该更快,而且可以由Excel读取
  3. RODBC内使用odbcConnectExcel2007
  4. 使用包bigmemory来帮助您管理大型数据帧,特别是当您可以将其变成稀疏矩阵时
  5. XLConnect为{a1}工作,但有相同的问题
  6. 使用RODBCRPostgreSQL等将其写入一个SQL数据库,然后在Excel中建立与数据库的连接。我经常这样做。这是一个related resource。在
  7. 使用^{}
  8. 创建一个tab-delimited文本文件,然后将其导入Excel:write.table (table,sep="\t",quote=FALSE,row.names=FALSE,file=file.name)
  9. 使用^{}
  10. 尝试一下cloud-based solution(我不确定这是否真的会更快,但它至少会是一个时尚的解决方案,有额外的好处,比如提供了一个安全存储数据的好方法,并允许您在任何计算机上使用Excel查询所需的任何内容)
  11. ^{}
  12. XLLoop

最后,这里是关于“连接R和Excel的一百万种方法”的a nice little article,您可能会发现它很有用,不过我认为我实际上给了您比本文更多的选择。在

我会从最简单的解决方案开始,比如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)`

加尼

相关问题 更多 >