es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for 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ón cumsum 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ón group_by agrupa los datos por la columna id. Luego, utilizando mutate, se crea una nueva columna llamada “event” aplicando la función cumsum a la diferencia entre la fecha de evento de cada fila y la fecha de evento de la fila anterior. El argumento default en la función lag 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.

Comments are closed.