dplyr лидерство / отставание с group_by - PullRequest
0 голосов
/ 29 августа 2018

Не понимаю, почему функции опережения и отставания игнорируют группу по. Вот простой пример (на самом деле мне нужно сгруппировать по 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)

Извиняюсь, если форматирование плохое, вопросы о коде не выкладывались раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...