阅读.xlsx2 |如果 sheetName 不存在则跳过
read.xlsx2 | Skipping if sheetName does not exist
我正在尝试使用 read.xlsx2 函数读取文件夹中的多个 excel 文件。我只需要阅读标题为 'Returns' 或 'Prices'.
的特定 sheet
有没有一种方法可以在函数中给出一个 'OR' 参数,并且如果文件不包含任何 sheet 也可以跳过该文件?
P.s.: 每个文件将有 'Returns' 或 'Prices' sheet 或两者都没有,但不能同时有,所以不会有冲突。
谢谢
您可以读取文件的所有 sheet 名称,并使用 intersect
select 'Returns'
或 'Prices'
之一,以存在于 sheet 并使用 sheet.
读取 excel 文件
使用 readxl
你可以这样做:
library(readxl)
all_files <- list.files(pattern = '\.xlsx$')
result <- lapply(all_files, function(x) {
all_sheets <- excel_sheets(x)
correct_sheet <- intersect(all_sheets, c('Returns', 'Prices'))
if(length(correct_sheet)) read_xlsx(x, correct_sheet)
})
result
将有一个数据帧列表。如果你想将数据合并到一个数据框中,并且它们具有相同的列名,你可以使用 do.call(rbind, result)
我正在尝试使用 read.xlsx2 函数读取文件夹中的多个 excel 文件。我只需要阅读标题为 'Returns' 或 'Prices'.
的特定 sheet有没有一种方法可以在函数中给出一个 'OR' 参数,并且如果文件不包含任何 sheet 也可以跳过该文件?
P.s.: 每个文件将有 'Returns' 或 'Prices' sheet 或两者都没有,但不能同时有,所以不会有冲突。
谢谢
您可以读取文件的所有 sheet 名称,并使用 intersect
select 'Returns'
或 'Prices'
之一,以存在于 sheet 并使用 sheet.
使用 readxl
你可以这样做:
library(readxl)
all_files <- list.files(pattern = '\.xlsx$')
result <- lapply(all_files, function(x) {
all_sheets <- excel_sheets(x)
correct_sheet <- intersect(all_sheets, c('Returns', 'Prices'))
if(length(correct_sheet)) read_xlsx(x, correct_sheet)
})
result
将有一个数据帧列表。如果你想将数据合并到一个数据框中,并且它们具有相同的列名,你可以使用 do.call(rbind, result)