Загрузка нескольких файлов в r в разных папках

#r

Вопрос:

Как загрузить из нескольких файлов из разных папок в r, а затем выполнить привязку строк.

Например, папки называются «неделя 1», «неделя 2», «неделя 3» … и все они находятся в главной папке «Year_2020».

В каждой еженедельной папке «неделя 1″, неделя 2»,… есть 7 различных папок, соответствующих каждому дню недели, и они названы в формате ГГГГММДД. Таким образом, папка «week1″ имеет 7 разных имен папок»20200101», «20200102»,…..»20200107″. Каждая из этих папок имеет имя файла csv VIEW_YYYYMMDD.csv, как показано ниже. Но у них нет никакой колонки дат.

Структура папок выглядит следующим образом

 YEAR_2020        week1      20200101           view_20200101.csv    
                 week1      20200102           view_20200102.csv
                            --------           -----------------
                 week1      20200107           view_20200107.csv
                 week2      20200108           view_20200108.csv
                 ------     --------           -----------------
 

образец csv — файлов

 df <- data.frame(Emp_Id = c(1,1,1,1,2,2,2,3,3),
             time = c(5,2,80,3,3,1,90,80,5),
             A = c(111,111,111,222,222,222,333,333,333))

   Emp_Id time   
   1    5 111
   1    2 111
   1   80 111
   1    3 222
   2    3 222
   2    1 222
   2   90 333
   3   80 333
   3    5 333
 

Моя проблема в том, что у меня нет столбца даты в csv-файлах, и я хочу сначала добавить столбец даты для каждого из этих отдельных файлов с соответствующей датой, а затем загрузить и связать строки, а затем в r?

Большинство решений просят хранить все файлы в одной папке, но у меня есть 52 папки, соответствующие 52 неделям папки «YEAR_2020», и в каждой папке по 7 папок, каждая из которых соответствует каждой дате недели. Таким образом, существует 365 файлов «view_yyyymmdd.csv»

Пожалуйста, помогите!

Ответ №1:

Попробуйте что-нибудь вроде этого:

 library(tidyverse)
library(lubridate)

main_folder %>%
  list.files(full.names = TRUE, recursive = TRUE) %>%
  map(read_csv) %>%
  setNames(., basename(.)) %>%
  imap(
    ~mutate(.x, date = ymd(str_extract(.y, "[0-9] ")))
  ) %>%
  bind_rows()
 

где main_path путь к папке, содержащей папки недели.