将包含公式的excel文件读入R中

时间:2015-08-14 16:29:33

标签: r excel import-from-excel

我试图将excel电子表格读入R数据框。但是,某些列具有公式或链接到其他外部电子表格。每当我将电子表格读入R时,总会有许多单元格变为NA。有没有一个很好的方法来解决这个问题,以便我可以获得这些单元格的原始值?

我以前用于导入的R脚本如下所示:

options(java.parameters = "-Xmx8g")
library(XLConnect)
# Step 1 import the "raw" tab
path_cost = "..."
wb = loadWorkbook(...)
raw = readWorksheet(wb, sheet = '...', header = TRUE, useCachedValues = FALSE)

1 个答案:

答案 0 :(得分:9)

来自read_excel包的

更新: readxl看起来是更好的解决方案。它非常快(我在评论中提到的1400 x 6文件中为0.14秒),它在导入之前评估公式。它不使用java,因此不需要设置任何java选项。

 # sheet can be a string (name of sheet) or integer (position of sheet)
 raw = read_excel(file, sheet=sheet)

有关更多信息和示例,请参阅the short vignette

原始回答:从read.xlsx包中尝试xlsx。帮助文件暗示默认情况下它会在导入之前评估公式(请参阅keepFormulas参数)。我在一个小测试文件上检查了它,它对我有用。正确导入公式结果,包括依赖于同一工作簿中的其他工作表的公式以及依赖于同一目录中其他工作簿的公式。

一个警告:如果自上次更新您正在读取R的文件上的链接后外部链接工作表发生了更改,那么读入R的任何依赖于外部链接的值将是旧值,而不是最新的。

您案例中的代码是:

library(xlsx)

options(java.parameters = "-Xmx8g") # xlsx also uses java

# Replace file and sheetName with appropriate values for your file
# keepFormulas=FALSE and header=TRUE are the defaults. I added them only for illustration.
raw = read.xlsx(file, sheetName=sheetName, header=TRUE, keepFormulas=FALSE)