Как рассчитать смещение для каждой группы с помощью 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_sales — NA , поскольку предыдущего значения продаж магазина A не существует.
- Второе значение lag1_sales — NA , поскольку предыдущего значения продаж магазина B не существует.
- Третье значение lag1_sales равно 7 , поскольку это предыдущее значение продаж магазина A.
- Четвертое значение lag1_sales равно 12 , поскольку это предыдущее значение продаж магазина B.
И так далее.
Обратите внимание, что вы также можете изменить количество используемых задержек, изменив значение n в функции lag() .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные вычисления в R:
Как рассчитать текущую сумму с помощью dplyr
Как рассчитать сумму по группе в R
Как рассчитать среднее значение на группу в R