R read_excel 或 readxl 多个文件与多个工作表 - 绑定

R read_excel or readxl Multiple Files with Multiple Sheets - Bind

我有一个充满 .xlsx 文件的目录。他们都有多个 sheet。我想从所有文件中提取相同的 sheet 并将它们附加到小标题中。

我找到了许多从单个 Excel 文件中提取多个 sheet 的解决方案;但是,多个文件中没有一个 sheet。

我试过:

    paths = as.tibble(list.files("data/BAH", pattern = ".xlsx", full.names = TRUE, all.files = FALSE))

    test <- paths %>% read_xlsx(sheet = "Portal", col_names = TRUE)

我知道 "paths" 变量包含我所有的文件名和路径。但是,我不确定如何遍历每个文件名,仅将特定的 sheet = "Portal" 附加到 csv 文件。

错误是:

Error: path must be a string

我曾尝试将路径作为矢量、小标题传递,并且也尝试了 sub-scripting。全部失败。

所以,总结一下。我有一个 xlsx 文件目录,我需要从每个文件中提取一个 sheet 并将其附加到 csv 文件。我曾尝试将 purrr 与某些地图功能一起使用,但也无法使其正常工作。

我的目标是使用 Tidy 方式。

感谢任何提示。

您必须使用 lapply()map()。尝试

test <- lapply(paths, read_xlsx, sheet = "Portal", col_names = TRUE)

library(purrr)
test <- map_dfr(paths, read_xlsx, sheet = "Portal", col_names = TRUE)

然后您可以使用

绑定数据帧
library(dplyr)
test %>% bind_rows()
library(tidyverse)    
library(readxl)
library(fs)

# Get all files
xlsx_files <- fs::dir_ls("data/BAH", regexp = "\.xlsx$")

paths = as_tibble(list.files("data/BAH", pattern = ".xlsx", full.names = TRUE, all.files = FALSE))


#portal_tabs <- map_dfr(paths, read_xlsx, sheet = "Portal", col_names = TRUE)
portal_tabs <- map_dfr(xlsx_files, read_xlsx, sheet = "Portal", col_names = TRUE, .id = 'source')