Вы можете использовать следующий синтаксис для вычисления запаздывающих значений по группам в 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
store sales
1 A 7
2 B 12
3 A 10
4 B 9
5 A 9
6 B 11
7 A 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 A 7 NA
2 B 12 NA
3 A 10 7
4 B 9 12
5 A 9 10
6 B 11 9
7 A 18 9
8 B 23 11
Вот как интерпретировать вывод:
- Первое значение lag1_sales равно NA , так как для магазина A нет предыдущего значения продаж.
- Второе значение lag1_sales равно NA , так как для магазина B нет предыдущего значения продаж.
- Третье значение lag1_sales равно 7 , поскольку это предыдущее значение продаж для магазина А.
- Четвертое значение lag1_sales равно 12 , поскольку это предыдущее значение продаж для магазина B.
И так далее.
Обратите внимание, что вы также можете изменить количество используемых задержек, изменив значение n в функции lag() .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные вычисления в R:
Как рассчитать совокупную сумму с помощью dplyr
Как рассчитать сумму по группе в R
Как рассчитать среднее значение по группе в R