2017-08-15 104 views
2

所以我有一堆excel文件我想循環讀取特定的不連續的列到數據框中。使用readxl作品像這樣的基本的東西:R按列名讀取excel

library(readxl) 
library(plyr) 
wb <- list.files(pattern = "*.xls") 
dflist <- list() 

for (i in wb){ 
    dflist[[i]] <- data.frame(read_excel(i, sheet = "SheetName", skip=3, col_names = TRUE)) 
} 

# now put them into a data frame 
data <- ldply(dflist, data.frame, .id = NULL) 

這工作(勉強),但問題是我的Excel文件有大約114列,我只希望特定的人。我也不想讓R猜測col_types,因爲它會混淆它們中的一些(例如,對於字符串列,如果第一個值以數字開頭,它會嘗試將整列解釋爲數字,並且崩潰)。所以我的問題是:如何指定特定的不連續列來讀取? range參數使用cell_ranger包,該包不允許讀取不連續的列。那麼任何替代方案

+0

是否有可能爲你的Excel文件保存爲從他們的CSV文件並導入? – user1945827

+0

我有超過100個,每個有多個表...所以...不:) – Alex

回答

2

openxlsx包中的read.xlsx函數具有參數cols即採用指定讀取哪些列數字索引。

如果至少有一列是字符,它似乎會將所有列讀作字符。

編輯:對於.xls文件,請參閱XLConnect包。想到安裝rJava可能會很棘手。 keepdrop參數readWorksheet()也接受列名稱。參數colTypes處理列類型。這樣,它爲我的作品:

options(java.home = "C:\\Program Files\\Java\\jdk1.8.0_74\\") 
library(rJava) 
library(XLConnect) 
workbook <- loadWorkbook("test.xls") 
readWorksheet(workbook, sheet = "Sheet0", keep = c(1,2,5)) 
+0

謝謝。是的,我想過使用它,但我的文件是'xls'格式,而不是'xlsx',所以軟件包無法處理。 – Alex

+0

@Alex我更新了我的答案並添加了適用於.xls文件的解決方案。 – Ape

+0

@亞歷克斯:這個作品非常漂亮。謝謝! – Alex