在R中使用excel文件

每当我处理R中的excel文件时,我仍然感到痛苦。

什么是最好的方法来做到以下几点?

1-在R中导入excel作为“整个工作簿”,并能够在工作簿中的任何表格中进行分析? 如果您考虑使用XLConnect ,请记住Java的“内存不足”问题。 我有超过30MB的文件,每次处理Java内存问题需要更多的时间。 (运行-Xmx不适用于我)。

2-不要错过任何Excel表格的数据? 将文件保存到csv说,有些纸张是“超出范围”,即65536行和256列。 也不能处理一些公式。

3-不必分别导入每张纸? 将工作表导入SPSS,STATA或Eviews,并将其保存到扩展中,然后使用R中的输出文件在大多数情况下工作正常。 但是,这种方法有两个主要问题, 一个是你必须在机器上下载软件,另一个是在import时只能input一张纸。 如果我有超过30张,将会非常耗时。

这可能是一个多次被回答的持续性问题,然而,每个答案都解决了问题的一部分,而不是整个问题。 这就像放火一样,不是在战略上解决问题。

我在R 3.1.1的Mac OS 10.10上

我试过几个包,打开excel openxlsx绝对是最好的路线。 它比其他的更快,更稳定。 该函数是:openxlsx :: read.xlsx。 我的build议是使用它来读取整个表格,然后使用R中的数据进行播放,而不是阅读表格的多个部分。 我用了很多,打开1000行以上的大型excel文件(8000 col加),它总是运行良好。 我使用xlsx包在excel中编写,但是它有很多内存问题需要阅读(这就是为什么我搬到了openxlsx)

添加在附注上,如果你想用excel来使用R,你有时需要从R执行一个VBA代码。我发现这个过程很难实现。 我完全logging了在堆栈中的上一个问题中正确的做法: 从R应用VBA

考虑使用xlsx包 。 它有处理Excel文件和工作表的方法。 你的问题是相当广泛的,但我认为这可以是一个例子:

 library(xlsx) wb <- loadWorkbook('r_test.xlsx') sheets <- getSheets(wb) sheet <- sheets[[1]] df <- readColumns(sheet, startColumn = 1, endColumn = 3, startRow = 1, endRow = 6) df ## id name x_value ##1 1 A 10 ##2 2 B 15 ##3 3 C 20 ##4 4 D 13 ##5 5 E 17 

至于内存问题,我认为你应该检查ff包 :

ff软件包提供了存储在磁盘上的数据结构,但是通过在主存储器中只透明地映射一个部分(页面大小)来performance(几乎)好像它们在RAM中一样。


另一个select(但可能是矫枉过正)将数据加载到一个真正的数据库,并处理数据库连接。 如果你正在处理数据集,数据库可能是最好的方法。

一些选项是:

  • RSQLite

    如果您可以将数据加载到SQLite数据库,则可以使用此数据包直接连接到该数据库并直接处理数据。 这将“分离”R和数据库引擎之间的工作负载。 SQLite是相当容易使用和(几乎)“免费configuration”,每个SQLite数据库存储在一个单一的文件。

  • RMySQL

    甚至比上述选项更好; MySQL非常适合存储大型数据集。 但是,您需要在您的计算机上安装和configurationMySQL服务器。

请记住:如果您使用R和数据库,那么相当繁重的工作负载委派给数据库(例如数据过滤,聚合等),并使用R来获得最终结果。