Не понимаю, почему функции опережения и отставания игнорируют группу по.
Вот простой пример (на самом деле мне нужно сгруппировать по 5 столбцам).
# Dummy DataSet
df <- data.frame(group = c("a","a","a","a", "a", "b", "b", "b", "b", "b"),
order = c(3, 4, 2, 5, 1, 1, 3, 4, 2, 4),
value = c(15, 22, 43, 31, 25, 11, 37, 24, 18, 9))
"group" "order" "value"
"a" 3 15
"a" 4 22
"a" 2 43
"a" 5 31
"a" 1 25
"b" 1 11
"b" 3 37
"b" 4 24
"b" 2 18
"b" 4 9
Попробовал это, но здесь не работает даже порядок по
df %>%
group_by(group) %>%
mutate(previous = dplyr::lag(value, n=1, default=NA, order_by = order))
Затем попытался договориться заранее.
df %>%
arrange(group, order) %>%
group_by(group) %>%
mutate(previous = dplyr::lag(value, n=1, default=NA))
"group" "order" "value" "previous"
"a" 1 25 NA
"a" 2 43 25
"a" 3 15 43
"a" 4 22 15
"a" 5 31 22
"b" 1 11 31
"b" 2 18 11
"b" 3 37 18
"b" 4 24 37
"b" 4 9 24
Что исправляет сортировку, но все еще игнорирует группу, поскольку b 1 должно быть NA, а не 31.
Я упускаю что-то очевидное или нельзя объединить lag / lead и group_by следующим образом?
Это будет работать в SQL с
LAG(value, 1, NULL) OVER (PARTITION BY group ORDER BY order)
Извиняюсь, если форматирование плохое, вопросы о коде не выкладывались раньше.