Импорт и переименование нескольких листов в книге Excel с map_df и read_excel - PullRequest
0 голосов
/ 08 ноября 2019

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

test <- data %>% excel_sheets() %>% map_df(read_excel, path=data)

Любые идеи о том, как это можно сделать, чтобы для каждого листаимпортировано, добавлен столбец с именем листа.

Пример: у меня есть рабочая книга с листами a, b и c, каждый из которых имеет столбцы данных 1, data2, data3, могу ли я импортировать и объединить их в 1 фрейм данных, который теперь имеет столбец 4, который соответствуетназвание листа, а, б или с?

1 Ответ

0 голосов
/ 08 ноября 2019

Так как excel_sheets() возвращает символьный вектор, вы можете добавить эти символьные значения в новом столбце к каждому набору данных, когда вы читаете его. Это включает использование более сложной функции в map_dfr(), так как теперь вы хотите сделать 2Задачи: 1., прочитайте набор данных с read_excel() и 2., добавьте к нему столбец, содержащий имя листа.

Если path - ваш путь к документу Excel, и вы называете новый столбецname, код может выглядеть примерно так:

library(readxl)
library(purrr)
library(dplyr)

path = "Path_to_excel_file.xlsx"
path %>% 
     excel_sheets() %>%
     map_dfr(
          function(sheet) {
               dat = read_excel(sheet, path = path)
               mutate(dat, name = sheet)
          }
     )

Вы можете видеть, что я использовал анонимную функцию вместо кода тильды. Мне часто легче переходить на их использование, когда я делаю несколько шагов в рамках одного цикла карты, но это абсолютно личное предпочтение.

Я добавил новый столбец с mutate(), но это можно сделатьи другими способами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...