2014-03-14 328 views
2

大約有XLConnect和R讀取Excel文件XLConnect像How to read multiple excel sheets in R programming?,包括rbind功能很多帖子,但沒有人回答了這個問題:循環讀取併合並多個Excel表格中的R

如果我有多個Excel .xls文件在一個目錄中我怎樣才能使用循環讀取和合並 每一個爲了?

我有一個目錄,所以我這樣做:

setwd("C:/Users/usuario/Desktop") 
    library(rjava) 
    library(XLConnect) 

那個目錄中有28個名爲像這樣的Excel文件:

Bitacora_Metrocali_01_02_2014C 
Bitacora_Metrocali_02_02_2014C 
     . ... ... 
Bitacora_Metrocali_28_02_2014C 

所以我需要使用的功能合併它們: 合併( x,y,all = T)

因此它可以向數據框添加新列。 thig是,我需要一個數據幀,開始 第一個合併,然後依次添加所有新的工作表。所有excel 文件的相關文件在表1中。

THX!

+0

我可以閱讀它們,也可以合併,我的意思是,每一個。但我有太多的文件。在這個例子中,我有28個,但是還有更多...是真實的。我需要一個循環來做到這一點。 Thx – JULIAN

回答

3

這是否對你的工作:

# This will give you a vector of the names of files in your current directory 
# (where I've assumed the directory contains only the files you want to read) 
data.files = list.files() 

# Read the first file 
df = readWorksheetFromFile(file=data.files[1], sheet=1) 

# Loop through the remaining files and merge them to the existing data frame 
for (file in data.files[-1]) { 
    newFile = readWorksheetFromFile(file=file, sheet=1) 
    df = merge(df, newFile, all=TRUE) 
} 
+0

它得到一些as.posixct錯誤,但這是因爲excel文件是如此複雜。謝謝!我和別人一起工作。 – JULIAN

1

下面是一個lapplyReduce方法 我使用的read.xls從GDATA包,正如你所提到XLS文件。 如果它是xlsx改爲用read.xls替換readWorksheetFromFile並加載相應的庫。

library(gdata) 
data.files = list.files(pattern = "*.xls") #get list of files 
data.to.merge <- lapply(files, read.xls) #read in files using lapply 
merged.data <- Reduce(function(...) merge(..., all = T),data.to.merge)#merge all the files 

的merged.data將有來自所有表的數據,也將處理的 文件與不同的頁眉的情況。

+0

它不適合我。 gdata包不起作用。我需要用perl軟件來實現它嗎? – JULIAN

+0

讓我給你一個積極的一點,但幫助我如何閱讀excel文件與gdata,因爲,我現在不能。我有Windows 64位 – JULIAN

+0

這些xlsx文件或xls文件? – infominer