Я пытаюсь сгруппировать события по времени их появления.Чтобы добиться этого, я просто вычисляю разницу по временным меткам и хочу по сути начать новую группу, если разница больше определенного значения.Я бы попробовал как код ниже.Однако это не работает, так как переменная диалога недоступна во время преобразования, в котором она создана.
library(tidyverse)
df <- data.frame(time = c(1,2,3,4,5,510,511,512,513), id = c(1,2,3,4,5,6,7,8,9))
> df
time id
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 510 6
7 511 7
8 512 8
9 513 9
df <- df %>%
mutate(t_diff = c(NA, diff(time))) %>%
# This generates an error as dialog is not available as a variable at this point
mutate(dialog = ifelse(is.na(t_diff), id, ifelse(t_diff >= 500, id, lag(dialog, 1))))
# This is the desired result
> df
time id t_diff dialog
1 1 1 NA 1
2 2 2 1 1
3 3 3 1 1
4 4 4 1 1
5 5 5 1 1
6 510 6 505 6
7 511 7 1 6
8 512 8 1 6
9 513 9 1 6
Словом, я хочу добавить столбец, который указывает на первый элемент каждой группы.Таким образом, группы различаются в точках, в которых разница с предыдущим элементом превышает 500.
К сожалению, я не нашел разумного обходного пути для достижения этого эффективным способом с использованием dplyr.Очевидно, что перебор цикла data.frame с циклом будет работать, но будет очень неэффективным.
Есть ли способ добиться этого в dplyr?