将多个Excel工作簿中的数据与多个Excel工作表合并到一个R数据框中

将多个Excel工作簿中的数据与多个Excel工作表合并到一个R数据框中,r,excel,purrr,R,Excel,Purrr,我正在尝试将多个Excel工作簿中的特定单元格区域合并到一个R数据框中,每个Excel工作簿都有多个工作表。每个Excel工作簿都有一个我想忽略的“说明”工作表,然后所有后续工作表都以相同的布局进行结构,我想从每个工作表中选择单元格H4:R17。到目前为止,我已经成功地将所有工作簿中所有工作表的所有单元格合并到一个非常混乱的数据框中。但是,我正在努力识别正确的代码,以便在读取此信息时忽略“说明”表,并按所需单元格范围H4:R17进行子集。我已将我的代码包括在下面: 有什么想法吗 #how to

我正在尝试将多个Excel工作簿中的特定单元格区域合并到一个R数据框中,每个Excel工作簿都有多个工作表。每个Excel工作簿都有一个我想忽略的“说明”工作表,然后所有后续工作表都以相同的布局进行结构,我想从每个工作表中选择单元格H4:R17。到目前为止,我已经成功地将所有工作簿中所有工作表的所有单元格合并到一个非常混乱的数据框中。但是,我正在努力识别正确的代码,以便在读取此信息时忽略“说明”表,并按所需单元格范围H4:R17进行子集。我已将我的代码包括在下面:

有什么想法吗

#how to join multiple files based on multiple sheets
read_multiple_excel <- function(path) {
  path %>%
    excel_sheets() %>% 
    set_names() %>% 
    map_df(read_excel,path = path)
}
  
#joining all data.frames
data_df <- dir_ls(regexp = "xlsx") %>% 
  map_df(read_multiple_excel,
         .id = "workbook_name")

str(data_df)
结果


谢谢,尤里!这似乎解决了删除“说明”表的问题。对于如何在读取剩余excel工作表时仅选择子集范围,您有什么建议吗?使用参数范围修复代码map2_df.x=set_nameslink$files、.y=link$sheets、read_xlsx、.id=workbook、range=A1:B3
library(tidyverse)
library(readxl)

files <- list.files(
  path = "./sourse/xlsx", 
  pattern = "\\.xlsx$", 
  full.names = T
)
link <- data.frame(files = files) %>% 
  mutate(sheets = map(files, excel_sheets)) %>% 
  unnest(sheets) %>% 
  filter(sheets != "instruction")

# A tibble: 4 x 2
  files                  sheets
  <chr>                  <chr> 
1 ./sourse/xlsx/df1.xlsx sh1   
2 ./sourse/xlsx/df1.xlsx sh2   
3 ./sourse/xlsx/df2.xlsx sh1   
4 ./sourse/xlsx/df2.xlsx sh2  
map2_df(.x = set_names(link$files), .y = link$sheets, read_xlsx, .id = "workbook", range = "A1:B3")

# A tibble: 8 x 3
  workbook                   x     y
  <chr>                  <dbl> <dbl>
1 ./sourse/xlsx/df1.xlsx     1     3
2 ./sourse/xlsx/df1.xlsx     2     4
3 ./sourse/xlsx/df1.xlsx     5     7
4 ./sourse/xlsx/df1.xlsx     6     8
5 ./sourse/xlsx/df2.xlsx     9    11
6 ./sourse/xlsx/df2.xlsx    10    12
7 ./sourse/xlsx/df2.xlsx    13    15
8 ./sourse/xlsx/df2.xlsx    14    16