2

我有一个包含 Excel 文件的目录:

sites=list.files(pattern='[.]xls')
> sites
[1] "test1.xls" "test2.xls" "test3.xls"

这有效:

a=read.xlsx(sites[1],14)

所以我希望这也会起作用:

df=data.frame()
  for (i in sites){
  x=read.xlsx(sites[i],14)
  x=x[560:831,12:14]
  df=rbind.fill(df,x)
  }

但是,这给出了:

Error in loadWorkbook(file) : Cannot find NA

这里出了什么问题?此外,有没有办法对此进行矢量化 - 文件很大并且加载速度很慢;我不能使用 read.xlsx2 因为数据不是正确的 [表格] 格式。

4

2 回答 2

4

i遍历索引的元素sites而不是索引。试试for(i in 1:length(sites))吧。或x=read.xlsx(i,14)

于 2013-02-28T07:47:09.810 回答
2

您可以尝试ldplyplyr包装中使用。

我首先定义一个函数,因为您只想获取每个文件的一部分。如果您要全部使用,则可以read.xlsxldply通话中使用。

library(xlsx)
library(plyr)
sites=list.files(pattern='[.]xls')

fun <- function(x) {
  df <- read.xlsx(x, sheetIndex=14)
  df <- df[560:831,12:14]
}

然后fun使用ldply

df.big <- ldply(sites, fun)

这应该为您提供一个包含所有工作表的数据框。

于 2013-02-28T08:08:20.423 回答