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

#r

#r

Вопрос:

У меня есть данные временных рядов нескольких продуктов в одном фрейме данных. Пример: столбцы: Имя, размер, объем, дата

Объемы измеряются каждую неделю, я хочу преобразовать это в ежемесячную оценку математическим способом, т. Е. Не просто брать любую неделю в этом месяце, а, например, — давайте начнем с 1 января, я беру первые четыре недели плюс 3/7 четвертой недели, чтобы сделать 31дни и на второй месяц я беру 4/7-ю часть разделенной недели плюс все, что мне нужно, и так далее. Это очень утомительно делать вручную или даже в цикле for.

Есть ли более разумный способ сделать это? Пожалуйста, помогите

У меня была идея, но я не уверен в реализации, чтобы разделить данные и просто суммировать все в прогнозируемом конце месяца. Как я могу это сделать?

Ответ №1:

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

 library(lubridate)
library(tidyverse)

data <- tibble(product = c(rep("a", 30), rep("b", 30)),
               week = rep(ymd("2020-09-24")   weeks(1:30),2),
               volume = 1:60)

new <- tibble(date = seq(min(data$week), max(data$week), by ="days")) %>% 
  mutate(week = floor_date(date, unit = "weeks", week_start = 4),
         month = floor_date(date, unit = "months")) %>% 
  left_join(data) %>% 
  group_by(product, week) %>% 
  mutate(volume = volume/n()) %>% 
  group_by(product, month) %>% 
  summarize(volume = sum(volume), .groups = "drop")
  

Обязательно измените week_start , чтобы соответствовать любому дню, в который начинается ваша неделя