3

所以我有一堆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不允许读取不连续列的包。那么有什么选择吗?

4

1 回答 1

4

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

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

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

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

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

潜在的问题是 libraryXLConnect需要 library rJava,在某些系统上安装可能会很棘手。如果你可以让它运行,keepdrop参数readWorksheet()接受列名和索引。参数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))

编辑:

如果您想从您的 excel 文件中读取范围(矩形),则库readxl适用于 .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))
于 2017-08-15T15:32:26.077 回答