【问题标题】:Working with excel file in R在 R 中使用 excel 文件
【发布时间】:2014-10-31 02:16:48
【问题描述】:

每次在 R 中处理 excel 文件时,我仍然很痛苦。

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

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

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

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

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

我使用的是带有 R 3.1.1 的 Mac OS 10.10

【问题讨论】:

  • 显然战略解决方案是完全停止使用 Excel。继续,你知道你想要。
  • 因为答案取决于许多变量,您需要尝试各种可能性。这是一个列表:web.archive.org/web/20131109195709/http://rwiki.sciviews.org/…
  • @Andrie 我希望我可以。问题是我正在使用一些数据库,并且数据集仅在 excel 中可用。我希望他们在分析数据时看到有多少人因 excel 而受苦,并提供一种替代方法。
  • 您在使用.xlsx 文件吗?还是旧的.xls 文件?
  • 伙计...我感觉到你的痛苦。 Excel 应该用作分析过程的最后一步,但人们认为它是一个该死的数据库。如果您在从某人那里获取数据时遇到问题,而他们最终将其发送到一个 excel 文件中,那么您现在有两个问题。

标签: r excel


【解决方案1】:

我已经尝试了几个包打开一个excel openxlsx绝对是最好的路线。它比其他的更快,更稳定。函数是:openxlsx::read.xlsx。我的建议是使用它来阅读整张纸,然后在 R 中使用数据,而不是多次阅读纸的一部分。我经常用它来打开 1000 行以上的大型 excel 文件(8000 列以上),而且它总是运行良好。我使用包 xlsx 在 excel 中编写,但它有很多内存问题要读取(这就是我转向 openxlsx 的原因)

-添加 附带说明一下,如果您想将 R 与 excel 一起使用,您有时需要从 R 执行 VBA 代码。我发现该过程很难实现。我在堆栈中的上一个问题中完整记录了正确的做法:Apply VBA from R

【讨论】:

    【解决方案2】:

    考虑使用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 包提供了存储在磁盘上的数据结构,但它们的行为(几乎)就好像它们在 RAM 中一样,只透明地映射主内存中的一个部分(页面大小)。


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

    一些选项是:

    • The RSQLite package

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

    • The RMySQL package

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

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

    【讨论】:

    • xlsx 将返回与XLConnect 相同的内存问题。使用ff 包或任何内存解决方案会使问题过于复杂。
    • @AhmedSalhin 那么也许数据库解决方案是一个更好的方法......当然你需要编写一个程序来将数据从 excel 发送到数据库......但考虑到你的内存问题'面对,可能是个不错的选择
    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多