R 按列名读取 excel

R read excel by column names

所以我有一堆 excel 文件,我想遍历这些文件并将特定的、不连续的列读取到数据框中。使用 readxl 适用于这样的基本内容:

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 包,它不允许读取不连续的列。那么还有其他选择吗?

.xlsx >>> 你可以使用库 openxlsx

openxlsx 中的 read.xlsx 函数有一个可选参数 cols,它采用数字索引,指定要读取的列。

如果至少一列包含字符,它似乎会将所有列读取为字符。

openxlsx::read.xlsx("test.xlsx", cols = c(2,3,6))

.xls >>> 你可以使用库 XLConnect

潜在的问题是库 XLConnect 需要库 rJava,这在某些系统上安装可能很棘手。如果你能得到它运行,readWorksheet()keepdrop参数接受列名和索引。参数 colTypes 处理列类型。这样对我有用:

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

编辑:

readxl 如果您想从 excel 文件中读取一个范围(矩形),则对 .xls 和 .xlsx 都适用。例如

readxl::read_xls("test.xls", range = "B3:D8")
readxl::read_xls("test.xls", sheet = "Sheet1", range = cell_cols("B:E"))
readxl::read_xlsx("test.xlsx", sheet = 2, range = cell_cols(2:5))