在 R 中导入包含多个工作表的多个 .xlsx 文件

Importing multiple .xlsx files with multiple sheets in R

我在 R 中导入包含多个工作表的多个 .xlsx 文件时遇到问题。 我有 6 个 Excel 文件,每个文件有 5 个不同的工作表(它们的长度都相同)。 我想将它们作为以下列表形式导入 R:

[[1]][[1]]
[[2]][[1]]
[[3]][[1]]
[[4]][[1]]
[[5]][[1]]
[[6]][[1]]
[[2]][[1]]
[[2]][[2]]
[[2]][[3]]
.
.
.
[[6]][[5]]

其中第一个列表对应于特定的 Excel-文件,第二个列表对应于工作表。 因此,第一个 [[1]][[1]] 是第一个 Excel 文件的第一个工作表。

我写了下面的代码

path_ <- "~/Desktop/my_folder/"

#This is suppose to read all the Excel-files
file.list <- list.files(path = paste(path_), pattern='*.xlsx', full.names = TRUE)
df.list <- lapply(file.list, function (x)  read_xlsx(x))

但它只是 returns 六个 Excel 文件中每个文件的第一个工作表。

[[1]]
[[2]]
[[3]]
[[4]]
[[5]]
[[6]]

我不知道如何让它工作。 有人可以帮我解决这个问题吗?

让我们有 2 个文件,每个文件有两个工作表:

library(tidyverse)
library(readxl)

list.files("~/data", full.names = TRUE)
#> [1] "/home/rstudio/data/data.xlsx"  "/home/rstudio/data/data2.xlsx"
read_excel("/home/rstudio/data/data.xlsx", sheet = 1)
#> # A tibble: 2 x 2
#>   a       `1`
#>   <chr> <dbl>
#> 1 b         2
#> 2 c        NA
read_excel("/home/rstudio/data/data.xlsx", sheet = 2)
#> # A tibble: 2 x 2
#>   d       `4`
#>   <chr> <dbl>
#> 1 e         5
#> 2 f         6


expand_grid(
  file = list.files("~/data", full.names = TRUE),
  sheet = seq(2)
) %>%
  transmute(data = file %>% map2(sheet, ~ read_excel(path = .x, sheet = .y))) %>%
  pull(data)
#> [[1]]
#> # A tibble: 2 x 2
#>   a       `1`
#>   <chr> <dbl>
#> 1 b         2
#> 2 c        NA
#> 
#> [[2]]
#> # A tibble: 2 x 2
#>   d       `4`
#>   <chr> <dbl>
#> 1 e         5
#> 2 f         6
#> 
#> [[3]]
#> # A tibble: 2 x 2
#>   a       `1`
#>   <chr> <dbl>
#> 1 b         2
#> 2 c        NA
#> 
#> [[4]]
#> # A tibble: 2 x 2
#>   d       `4`
#>   <chr> <dbl>
#> 1 e         5
#> 2 f         6

reprex package (v2.0.1)

于 2021-11-11 创建