从文件中读取 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')
我有以下两个函数,它们读取 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')