Як агрегувати щоденні дані в місячні та річні дані в 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) dirty date 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 average sales per week
df %>%
group_by (week) %>%
summarize (mean = mean (sales))
# A tibble: 15 x 2
week means
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 average 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 average sales by month
df %>%
group_by (year) %>%
summarize (mean = mean (sales))
# A tibble: 2 x 2
year means
1 2020-01-01 35.3
2 2021-01-01 35.7
Зауважте, що ми обираємо агрегування за середнім значенням, але ми можемо використовувати будь-яку зведену статистику, як-от медіану, режим, максимум, мінімум тощо.
Додаткові ресурси
У наступних посібниках пояснюється, як виконувати інші типові завдання в R:
Як обчислити середнє значення на групу в R
Як обчислити кумулятивні суми в R
Як побудувати часовий ряд у R