Crear una columna que agrupe una secuencia de fechas consecutivas con un ID en R
He estado tratando de encontrar una solución a esto y no estoy seguro de si requeriría varios pasos utilizando dplyr y/o creando algún tipo de función. Básicamente, quiero crear una columna “evento” con variables que vinculen una secuencia de fechas repetidas y un ID juntos e indiquen el orden del evento.
Antes:
fecha_evento id
2020-12-25 111
2020-12-26 111
2020-12-27 111
2020-12-30 222
2020-12-30 222
2021-01-30 333
2021-01-31 333
2021-05-25 222
2021-05-26 222
2021-07-08 222
2021-07-09 222
Después:
fecha_evento id evento
2020-12-25 111 1
2020-12-26 111 1
2020-12-27 111 1
2020-12-30 222 1
2020-12-30 222 1
2021-01-30 333 1
2021-01-31 333 1
2021-05-25 222 2
2021-05-26 222 2
2021-07-08 222 3
2021-07-09 222 3
El proceso para asignar valores de eventos es básicamente si el ID está vinculado a una secuencia de fechas consecutivas, entonces esto puede agruparse en un evento. Si el ID está vinculado a múltiples fechas consecutivas/fechas individuales, entonces eso es un evento nuevo y separado asociado con ese ID.
EDITAR: se agregaron más puntos de datos para proporcionar más información.
davy.ai
Para crear la columna de eventos, podemos utilizar el paquete dplyr. Primero, agrupamos los datos por id y luego creamos una nueva columna llamada “event” utilizando la función
cumsum
. La funcióncumsum
sumará 1 a cada nuevo grupo de fechas consecutivas.“`{r}
library(dplyr)
df <- df %>%
arrange(id, event_date) %>%
group_by(id) %>%
mutate(event = cumsum(event_date – lag(event_date, default = first(event_date)) > 1))
“`
Aquí,
arrange
se utiliza para ordenar los datos por id y luego por fecha de evento en orden ascendente. La funcióngroup_by
agrupa los datos por la columna id. Luego, utilizandomutate
, se crea una nueva columna llamada “event” aplicando la funcióncumsum
a la diferencia entre la fecha de evento de cada fila y la fecha de evento de la fila anterior. El argumentodefault
en la funciónlag
asegura que la primera fecha de cada grupo se trate como un nuevo evento.Este código debería resultar en una nueva columna “event” agregada al marco de datos existente, con cada nueva secuencia de fechas consecutivas para un determinado id resultando en un valor de evento único.