从文件中读取 excel 个工作表并将它们绑定以形成单个数据框

Reading excel sheets from a file and binding them to form a single dataframe

我有以下两个函数,它们读取 excel 个工作表,进行一些数据清理并将这些工作表绑定在一起。

library(tidyverse)
library(readxl)
read <- function(Path, Sheet){
  df <- read_excel(path = Path, sheet = Sheet, 
             skip = 24,
             na = '-')[-2, ]  %>%
    mutate(name = Sheet) %>%
    rename_all(~str_replace_all(., "\s+", ""))
  
  return(df)
}

sheets <- function(number){
  if(number == 1){
    Sheets <- c("A", "B")
  } else if(number == 2){
    Sheets <- c("C","D")
  } else{
    warning("sheet number can only be 1 or 2")
  }
  s1<-read(path="Data/file1",Sheet=Sheets[1])
  s2<-read(path="Data/file1",Sheet=Sheets[2])
  return(rbind(s1,s2))
}

函数工作正常,但我想更新 'sheets()' 函数,以便它将任意数量的工作表绑定在一起(而不是像我上面所做的那样仅仅假设固定数量 (2) 个工作表。我正在考虑为此使用 for 循环,但有更好的方法吗?

您可以使用 excel_sheets 获取 excel 中的所有工作表并将它们与 map_df 组合在一起。

sheets <- function(path){
  sheets <- readxl::excel_sheets(path)
  purrr::map_df(sheets, read, Path = path)
}

result <- sheets('Data/file1')