2013-02-28 48 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