使用R中的excel文件

时间:2014-10-28 14:37:43

标签: r excel

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

执行以下操作的最佳方式是什么?

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

2-不要错过任何excel表中的任何数据?将文件保存到csv表示某些工作表“超出范围”,即65,536行和256列。它也无法处理一些公式。

3-不必单独导入每张纸?将工作表导入到SPSS,STATA或Eviews并将其保存到其扩展中,然后使用R中的输出文件大部分时间都可以正常工作。但是,这种方法有两个主要问题;一个是你必须在机器上下载软件,另一个是它一次只导入一张纸。如果我有超过30张,它将变得非常耗时。

这可能是一个已经多次回答的问题,然而,每个答案都解决了问题的一部分而不是整个问题。这就像放火一样没有战略性地解决问题。

我在Mac OS 10.10上使用R 3.1.1

2 个答案:

答案 0 :(得分:4)

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

- 加入 另外,如果你想将R与excel一起使用,你有时需要从R执行VBA代码。我发现这个过程很难实现。我在堆栈的前一个问题中完整地记录了这样做的正确方法:Apply VBA from R

答案 1 :(得分:0)

考虑使用xlsx package。它有处理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 package

  

ff包提供了存储在磁盘上的数据结构,但通过透明地仅映射主存储器中的一个部分(pagesize),它们(几乎)就像它们在RAM中一样。


另一种选择(但可能是过度杀伤)是将数据加载到真实的数据库并处理数据库连接。如果您正在处理非常大的数据集,那么数据库可能是最好的方法。

有些选择是:

  • The RSQLite package

    如果可以将数据加载到SQLite数据库,则可以使用此包直接连接到该数据库并直接处理数据。这将“拆分”R和数据库引擎之间的工作量。 SQLite非常易于使用,并且(几乎)“免费配置”,每个SQLite数据库都存储在一个文件中。

  • The RMySQL package

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

请记住:如果您使用R和数据库,委托尽可能多的工作负载到数据库(例如数据过滤,聚合等),并使用R来获得最终结果。