R按列名读取excel

R按列名读取excel

问题描述:

所以我有一堆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

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