用Excel或运算符从Excel中读入可选表格
我有一个包含数千个Excel工作簿(.xlsx)的文件夹。 一半的工作簿有一张名为“ Data
”的工作表,一半工作表中有一张名为“ Changes
的工作表。 这两张表都包含相同types的信息,只是标记不同。 没有理由或命令为什么一些被标记的Changes
和其他Data
。
目前,我阅读所有表中的代码
myfiles <- list() temp = list.files(pattern="*.xls") myfiles = lapply(temp, function(x){as.data.frame(read_excel(x,sheet = "Data"))})
但是这只能读取带有Data
名称的表单。
我想要做的是这样的:
myfiles = lapply(temp, function(x){as.data.frame(read_excel(x,sheet = "Changes" || sheet = "Data"))})
如果我试图加载所有的工作簿作为一个整体
myfiles = lapply(temp, function(x){loadworkbook(x)})
我得到一个有关超出GC开销限制的错误。
我不确定你能否以这种方式通过一个论点or
一个论点。 一种解决方法是读取表单名称,search"data"
,如果存在,请阅读"data"
表单,如果没有读取"changes"
表单。 在这里,我定义了一个函数read_excel_if
来执行单个文件的检查,然后我map
这个函数map
到你的temp
variables中的所有文件,然后使用bind_rows
reduce
所有的文件reduce
到一个单一的dataframe – 如果你只是想要一个列表dataframes
。
library(readxl) library(purrr) library(dplyr) read_excel_if <- function(file_path) { sheets <- excel_sheets(file_path) if ("data" %in% sheets) { df <- read_excel(file_path, sheet = "data") } else { df <- read_excel(file_path, sheet = "changes") } df } temp %>% map(read_excel_if) %>% reduce(bind_rows)