Як розрахувати зсув на групу за допомогою dplyr


Ви можете використовувати наступний синтаксис для обчислення групових зсувів у R за допомогою пакета dplyr :

 df %>%
  group_by(var1) %>%
  mutate(lag1_value = lag(var2, n= 1 , order_by=var1))

Примітка : функція mutate() додає нову змінну до кадру даних, який містить відкладені значення.

У наступному прикладі показано, як використовувати цей синтаксис на практиці.

Приклад: обчислення зміщених значень за групою за допомогою dplyr

Припустімо, що ми маємо наступний кадр даних у R, який показує продажі, здійснені двома різними магазинами в різні дні:

 #create data frame
df <- data. frame (store=c('A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'),
                 sales=c(7, 12, 10, 9, 9, 11, 18, 23))

#view data frame
df

  blind sales
1 to 7
2 B 12
3 to 10
4 B 9
5 to 9
6 B 11
7 to 18
8 B 23

Ми можемо використати наступний код, щоб створити новий стовпець, у якому відображатимуться відкладені значення продажів для кожного магазину:

 library (dplyr)

#calculate lagged sales by group
df %>%
  group_by(store) %>%
  mutate(lag1_sales = lag(sales, n= 1 , order_by=store))

# A tibble: 8 x 3
# Groups: store[2]
  store sales lag1_sales
1 to 7 NA
2 B 12 NA
3 to 10 7
4 B 9 12
5 to 9 10
6 B 11 9
7 to 18 9
8 B 23 11

Ось як інтерпретувати результат:

  • Перше значення lag1_salesNA , тому що немає попереднього значення для продажів магазину A.
  • Друге значення lag1_salesNA , тому що немає попереднього значення для продажів магазину B.
  • Третє значення lag1_sales дорівнює 7 , оскільки це попереднє значення продажів магазину A.
  • Четверте значення lag1_sales дорівнює 12 , оскільки це попереднє значення продажів магазину B.

І так далі.

Зауважте, що ви також можете змінити кількість використовуваних затримок, змінивши значення n у функції lag() .

Додаткові ресурси

У наступних посібниках пояснюється, як виконувати інші поширені обчислення в R:

Як обчислити поточну суму за допомогою dplyr
Як обчислити суму за групою в R
Як обчислити середнє значення на групу в R

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *