Повторно использовать значение предыдущей строки во время dplyr :: mutate - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь сгруппировать события по времени их появления.Чтобы добиться этого, я просто вычисляю разницу по временным меткам и хочу по сути начать новую группу, если разница больше определенного значения.Я бы попробовал как код ниже.Однако это не работает, так как переменная диалога недоступна во время преобразования, в котором она создана.

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?

...