在 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 创建
我在 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 创建