Как объединить ежедневные данные в ежемесячные и ежегодные в R


Иногда вам может понадобиться агрегировать ежедневные данные в еженедельные, ежемесячные или годовые данные в R.

В этом руководстве объясняется, как легко это сделать с помощью пакетов lubridate и dplyr .

Пример: совокупные ежедневные данные в R

Предположим, у нас есть следующий фрейм данных в R, который показывает ежедневные продажи некоторого товара в течение 100 дней подряд:

#make this example reproducible
set.seed(1)

#create data frame 
df <- data.frame(date = as.Date (" 2020-12-01 ") + 0:99,
 sales = runif (100, 20, 50))

#view first six rows
head(df)

 date sales
1 2020-12-01 27.96526
2 2020-12-02 31.16372
3 2020-12-03 37.18560
4 2020-12-04 47.24623
5 2020-12-05 26.05046
6 2020-12-06 46.95169

Чтобы агрегировать эти данные, мы можем использовать функцию floor_date() из пакета lubridate , которая использует следующий синтаксис:

floor_date (x, unit)

куда:

  • x: вектор объектов даты.
  • unit: единица времени для округления. Опции включают секунды, минуты, часы, день, неделю, месяц, два месяца, квартал, полугодие и год.

В следующих фрагментах кода показано, как использовать эту функцию вместе с функциями group_by() иsummary() из пакета dplyr , чтобы найти средние продажи по неделям, месяцам и годам:

Средние продажи по неделям

library (lubridate)
library(dplyr)

#round dates down to week
df$week <- floor_date (df$date, " week ")

#find mean sales by week
df %>%
 group_by(week) %>%
 summarize(mean = mean (sales))

# A tibble: 15 x 2
 week mean

 1 2020-11-29 33.9
 2 2020-12-06 35.3
 3 2020-12-13 39.0
 4 2020-12-20 34.4
 5 2020-12-27 33.6
 6 2021-01-03 35.9
 7 2021-01-10 37.8
 8 2021-01-17 36.8
 9 2021-01-24 32.8
10 2021-01-31 33.9
11 2021-02-07 34.1
12 2021-02-14 41.6
13 2021-02-21 31.8
14 2021-02-28 35.2
15 2021-03-07 37.1

Средние продажи по месяцам

library (lubridate)
library(dplyr)

#round dates down to week
df$month <- floor_date (df$date, " month ")

#find mean sales by month
df %>%
 group_by(month) %>%
 summarize(mean = mean (sales))

# A tibble: 4 x 2
 month mean

1 2020-12-01 35.3
2 2021-01-01 35.6
3 2021-02-01 35.2
4 2021-03-01 37.0

Средние продажи по годам

library (lubridate)
library(dplyr)

#round dates down to week
df$year <- floor_date (df$date, " year ")

#find mean sales by month
df %>%
 group_by(year) %>%
 summarize(mean = mean (sales))

# A tibble: 2 x 2
 year mean

1 2020-01-01 35.3
2 2021-01-01 35.7

Обратите внимание, что мы выбрали агрегирование по среднему значению, но мы могли использовать любую сводную статистику, такую как медиана, мода, максимум, минимум и т. д.

Дополнительные ресурсы

Как рассчитать среднее значение по группе в R
Как рассчитать кумулятивные суммы в R
Как построить временной ряд в R

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.