Как я могу импортировать несколько файлов Excel с несколькими листами? - PullRequest
0 голосов
/ 17 апреля 2020

Всем доброй ночи:

Я пытаюсь импортировать 8 файлов Excel с одинаковой структурой, но с разными именами. У меня есть код для импорта одного файла с первыми 3 листами, но я должен повторить этот код 8 раз. Я хотел бы создать функцию, чтобы поместить ее только один раз, а также мне нужно знать, откуда они (название файла Excel). Заранее спасибо.

library(readxl)
read_excel_allsheets <- function("path", tibble = false){
sheets <- readxl::excel_sheets("path")
sheets <- sheets[c(1,2,3)]
x <- lapply(sheets, function(X) readxl::read_excel("path", sheet = X,skip = 5))
if(!tibble) x <- lapply(x, as.data.frame)
names(x) <- sheets
x
all_data1 <- do.call(rbind, lapply(sheets, function(X) 
transform(readxl::read_excel("path", sheet = X,skip = 5), estatus = X,tipo="Corriente",enfoque="Sector")))
}

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Мы можем сделать это за tidyverse

library(dplyr)
library(purrr)

read_excel_allsheets <- function(path, tibble = FALSE) {
      sheets <- readxl::excel_sheets(path)
      sheets <- sheets[c(1,2,3)]
      x <- map_dfr(sheets,  ~ .x %>%
              mutate(readxl::read_excel(path, sheet = .x,skip = 5), 
                    estatus = .x,tipo="Corriente",enfoque="Sector")))
      if(!tibble) x <- map(x, as.data.frame)
      names(x) <- sheets
      x
}

all_data <- map(list.files('/path', full.names = TRUE), read_excel_allsheets)
0 голосов
/ 17 апреля 2020

Попробуйте использовать это:

read_excel_allsheets <- function(path, tibble = FALSE) {
      sheets <- readxl::excel_sheets(path)
      sheets <- sheets[c(1,2,3)]
      x <- do.call(rbind, lapply(sheets, function(X) 
              transform(readxl::read_excel(path, sheet = X,skip = 5), 
                               estatus = X,tipo="Corriente",enfoque="Sector")))
      if(!tibble) x <- lapply(x, as.data.frame)
      names(x) <- sheets
      return(x)
}

all_data <- lapply(list.files('/path', full.names = TRUE), read_excel_allsheets)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...