R read_excel или readxl Несколько файлов с несколькими листами - Bind - PullRequest
0 голосов
/ 02 июля 2019

У меня есть каталог, полный файлов .xlsx. Все они имеют несколько листов. Я хочу извлечь один и тот же лист из всех файлов и добавить их в таблицу.

Я нашел множество решений для извлечения нескольких листов из одного файла Excel; однако не один лист из нескольких файлов.

Я пробовал:

    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" содержит все мои имена файлов с путем. Однако я не уверен, как перебирать каждое имя файла, добавляя только конкретный лист = "Портал" в CSV-файл.

Ошибка:

Error: path must be a string

Я пытался передать пути как вектор, как тиббл, и также попытался написать его в сценарии. Все терпит неудачу.

Итак, в заключение. У меня есть каталог файлов xlsx, и мне нужно извлечь один лист из каждого и добавить его в CSV-файл. Я попытался использовать purrr с некоторыми функциями карты, но также не смог заставить его работать.

Моя цель состояла в том, чтобы использовать способ Tidy.

Спасибо за любые подсказки.

Ответы [ 2 ]

2 голосов
/ 02 июля 2019

Вы должны использовать 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()
0 голосов
/ 09 июля 2019
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')
...