Прочитать все файлы Excel с несколькими листами в R - PullRequest
0 голосов
/ 11 января 2020

У меня есть очень простой код:

data = read_excel("02.01.xlsx", col_names = F)

data <- data %>%
   mutate(direction = c(data[1,3])) %>% 
   tidyr::fill(1) %>% 
   slice(-1:-2) %>% 
   janitor::row_to_names(row_number = 1) %>% 
   purrr::set_names(c("date", "time", "max_price", "max_power", "nominal_power", "direction"))

Но я должен применить его к каждому файлу Excel в моей папке и некоторым листам (1,2,3,6,7 , 8,9,11)

Я нашел этот код:

dir_path = "~/Documents/Dixi/Jan/"
re_file <- list.files(path = path, pattern = "*.xls")

read_sheets <- function(dir_path, file){
   xlsx_file <- paste0(dir_path, file)
   xlsx_file %>%
      excel_sheets() %>%
      set_names() %>%
      map_df(read_excel, path = xlsx_file, .id = 'sheet_name') %>% 
      mutate(file_name = file) %>% 
      select(file_name, sheet_name, everything())
}

df <- list.files(dir_path, re_file) %>% 
   map_df(~ read_sheets(dir_path, .))

а как их соединить? Я новичок в мурлыканье, и это очень трудно для меня. Спасибо!

1 Ответ

2 голосов
/ 11 января 2020

Таким образом, чтобы использовать параметры по умолчанию для read_excel, вы можете сделать что-то простое:

library(purrr)

dir_path = "~/Documents/Dixi/Jan/"
re_file <- list.files(path = dir_path, pattern = "*.xls")

# paste0(dir_path, "//", re_file) <- concatenate directory with file name
# readxl::read_excel <- reads data
map_df(paste0(dir_path, "//", re_file), readxl::read_excel)

Однако, поскольку вы знаете свои данные лучше и, очевидно, создали функцию для обработки параметров read_excel, это должно заставить вашу функцию работать;

library(readxl)
library(purrr)

dir_path = "~/Documents/Dixi/Jan/"
re_file <- list.files(path = dir_path, pattern = "*.xls")

read_sheets <- function(dir_path, file){
  xlsx_file <- paste0(dir_path, file)
  xlsx_file %>%
    excel_sheets() %>%
    set_names() %>%
    map_df(read_excel, path = xlsx_file, .id = 'sheet_name') %>% 
    mutate(file_name = file) %>% 
    select(file_name, sheet_name, everything())
}

re_file %>%
  map_df(function(x) read_sheets(dir_path = dir_path, x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...