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]
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.