#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
, чтобы соответствовать любому дню, в который начинается ваша неделя