Прочитать CSV из списка файлов и «изменить» столбец (дата) - PullRequest
0 голосов
/ 12 апреля 2020

Попытка прочитать несколько CSV-файлов, а затем суммировать до полезного уровня, но проблема в том, что некоторые даты имеют ГГГГММДД (символ), а другие - ДД-ММ-ГГГГ (дата), поэтому функция суммирования суммирует их отдельно. Я пробовал функцию mutate (мой код ниже), но это приводит к no applicable method for 'mutate_' applied to an object of class "list".

Я также поиграл с функцией map в purrr, но я не знаком с ней и могу ' это тоже не сработает.

sales_files <- list.files(path = "*folder redacted*", full.names = TRUE) %>%
  lapply(read_csv) %>% 
  mutate(date = case_when(left(date,4) == "2020" ~ as.Date(as.character(date),format="%Y%m%d"), TRUE ~ date))
  group_by(`ID`, `Date`) %>% 
  summarise(sales = sum(`Value`), quantity = sum(`Qty`)) %>% 
  bind_rows

TIA!

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

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

library(tidyverse)
library(lubridate)

output <- list.files(path = "*folder redacted*", full.names = TRUE) %>%
             map_df(~{
               #Read file name
               read_csv(.x) %>%
               #Convert different format date 
               mutate(date = parse_date_time(date, orders = c('Ymd', 'dmY'))) %>%
               #Group by ID and Date
               group_by(ID, Date) %>% 
               #Sum Value and Qty
               summarise(sales = sum(Value), quantity = sum(Qty))
           })
0 голосов
/ 12 апреля 2020

Мы можем использовать anydate из anytime для автоматического анализа нескольких дат

library(dplyr)
library(purrr)
library(anytime)
library(readr)
output <- list.files(path = "*folder redacted*", full.names = TRUE) %>%
             map_df(~{               
               read_csv(.x) %>%              
               mutate(date = anydate(date)) %>%               
               group_by(ID, Date) %>%                
               summarise(sales = sum(Value), quantity = sum(Qty))
           })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...