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.

R – Suma acumulada basada en fechas, con una condición por grupo.

Tengo el siguiente conjunto de datos.

Basado en la “fecha de inicio del evento” de cada fila, ya he sumado todos los días que ocurrieron dentro de un rango de 60 días (variable sum_days) a partir de la fecha de inicio del evento respectivo.

Sin embargo, hay una condición que solo considera las sumas mayores de 15 días, por ejemplo.
Por lo tanto, para las ocurrencias más largas de 15 días me gustaría asignar “0” a todas las filas que forman parte de ese respectivo período.

Resultado esperado:

Ejemplo de resultado esperado: La fila 2 se ha convertido en 0 ya que está contenida dentro del rango de la fila anterior cuya suma es mayor de quince días. El evento registrado en la fila 2 comienza el 2019-02-28, que pertenece al período comprendido entre el 2019-01-01 (inicio del evento) y el 2019-03-06 (final del intervalo de 60 días, 01-01-2019 + 60) de la primera fila cuya suma es mayor de 15.

¿Alguien tiene alguna sugerencia?

Ejemplo reproducible:

biblioteca(data.table)
biblioteca(dplyr)

Datos de entrada

datos <- data.table(id = c(“Grupo A”, “Grupo A”, “Grupo A”, “Grupo A”, “Grupo B”, “Grupo B”),
start_date_event = c(“2019-01-01”, “2019-02-28”, “2019-03-13”, “2019-03-19”, “2020-04-02”, “2020-05-15”),
end_date_event = c(“2019-01-05”, “2019-03-12”, “2019-03-18”, “2019-03-20”, “2020-05-06”, “2020-05-16”))

Convertir a fecha

datos <- datos %>%
dplyr::mutate(start_date_event = as.Date(start_date_event)) %>%
dplyr::mutate(end_date_event = as.Date(end_date_event)) %>%
dplyr::mutate(days_diff = as.integer(end_date_event – start_date_event)) %>%
dplyr::mutate(end_interval = end_date_event + 60) %>%
data.table::setDT()

Calculando la suma acumulada en 60 días

datos[.(c = id, tmin = start_date_event, tmax = start_date_event + 60),
on = .(id == c, start_date_event <= tmax, start_date_event >= tmin),
sum_days := sum(days_diff), by = .EACHI]

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.

Comments are closed.