Как объединить несколько листов из нескольких книг Excel в R?

Каждую неделю я получаю одни и те же данные с одинаковыми именами на вкладках Excel. Мне нужно сначала сгруппировать все листы с одинаковым именем и выполнить над ними операцию, прежде чем объединить их все вместе. Например:

    Week1.xlsx (workbook) 
     - Blue (sheet) - has a column named type that just says "Color"
     - Red (sheet) - has a column named type that just says "Color"
     - Green (sheet)` - has a column named type that just says "Color"


    Week2.xlsx (workbook) 
     - Blue (sheet) - has a column named type that just says "Color"
     - Red (sheet) - has a column named type that just says "Color"
     - Green (sheet) - has a column named type that just says "Color"

и т. д.

Мне нужно объединить все общие листы вместе и изменить столбец type, чтобы указать, из какого цветного листа он взят. Если бы я объединил их все вместе, то столбец type был бы заполнен только цветом, поэтому имя листа — единственная часть информации, которая говорит мне, как его организовать.

Конечный результат: all-data.xlsx

Type
Color - Blue
Color - Red
Color - Blue
Color - Green
.
.
.

Мне не обязательно нужна помощь со второй частью (изменение столбцов), я просто хочу знать, как объединить все общие листы вместе (возможно, в списке), к которым я могу получить доступ по имени.


person Adrian Fletcher    schedule 24.02.2021    source источник
comment
Я не думаю, что понимаю вопрос. С какой частью кода вам нужна помощь? Можете ли вы сократить код, чтобы включить только эту часть? Как должен выглядеть ваш окончательный результат?   -  person Ronak Shah    schedule 25.02.2021
comment
Посмотрите на пакет readxl, часть tidyverse.   -  person Limey    schedule 25.02.2021
comment
@RonakShah Мне нужна помощь, чтобы взять несколько листов Excel и объединить все вкладки с общими именами. Я отредактировал его для ясности. Я думаю, как только я получу это, я смогу пройти через все остальное.   -  person Adrian Fletcher    schedule 25.02.2021


Ответы (1)


EDIT: я не знал, как пометить это как дубликат, но я просто отправил его на проверку. Пожалуйста, смотрите сообщение ниже для получения дополнительных ответов.

Хорошо, я нашел ответ из этого сообщения, который прекрасно суммирует проблему. В частности, часть, которая говорит .id = 'sheet_name', достигает моей цели, назначая каждой строке имя листа.

library(tidyverse)
library(readxl)

dir_path <- "~/test_dir/"         # target directory path where the xlsx files are located. 
re_file <- "^test[0-9]\\.xlsx"    # regex pattern to match the file name format, in this case 'test1.xlsx', 'test2.xlsx' etc, but could simply be 'xlsx'.

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, .))
person Adrian Fletcher    schedule 25.02.2021