2013-02-28 118 views
2

我有一个Excel文件目录:遍历目录得到的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,因为数据不是以正确的[表格]格式。

+1

为什么不把你的文件保存为csv并用read.delim或read.csv读取它们?你不能对此进行矢量化。但是你可以使用'data.table'中的'rbindlist'来加速行绑定。看到[这](http://stackoverflow.com/questions/15102499/loading-multiple-files-into-matrix-using-r/15102639#15102639) – agstudy 2013-02-28 07:50:41

+0

问题是,有几百个Excel文件[例子这里给出的只有3],所以是的,将它们转换为csv会更容易,更快。 – Henk 2013-02-28 10:37:08

回答

4

您的i重复遍历sites的元素而不是索引。改为尝试for(i in 1:length(sites))。或者x=read.xlsx(i,14)

2

您可以尝试使用plyr软件包中的ldply

我首先定义了一个函数,因为您只想取每个文件的一部分。如果你全部使用它,你可以在ldply调用中使用read.xlsx

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

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

然后在ldply使用fun

df.big <- ldply(sites, fun) 

这应该给你所有你的床单合并的数据帧。

+0

优秀!这工作。 – Henk 2013-02-28 11:58:21