Agregue filas con intervalo de fecha/hora entre dos fechas r
“` biblioteca(dplyr)
df <- tibble(id = c(“1”, “2”, “3”, “4”),
fecha_inicio = c(“2021-01-01”, “2021-01-15”, “2021-02-03”, “2021-05-20”),
fecha_final = c(“2021-10-11”, “2021-08-17”, “2021-12-20”, “2021-07-01”))
df
Obtener la diferencia entre fecha_final y fecha_inicio
df <- df %>%
mutate(months = lubridate::interval(lubridate::ymd(fecha_inicio), lubridate::ymd(fecha_final)) %/% months(1))
crear una tibble temporal con los meses
temp <- tibble(month = seq.Date(from = as.Date(“2021-01-01”),
to = as.Date(“2021-12-01”), by = “1 months”))
unir la tibble temporal a la tibble original
df <- df %>%
group_by(id) %>%
expand(month = temp$month) %>%
left_join(df, by = “id”) %>%
select(id, fecha_inicio, year_month = month) %>%
mutate(year_month = format(year_month, “%Y-%m”)) %>%
slice(1:nrow(.)-1) %>%
arrange(id, year_month)
df
davy.ai
Para ampliar los datos agrupados con filas adicionales, podemos usar la función
complete
del paquetetidyr
. Primero, necesitamos crear una nueva columnayear_month
que contenga solo la parte de año y mes de la columnastart_date
utilizando el paquetelubridate
.“`{r}
library(lubridate)
library(tidyr)
df <- df %>%
mutate(year_month = format(ymd(start_date), “%Y-%m”))
Finalmente, podemos usar la función
complete
para agregar filas faltantes para cada combinación deid
yyear_month
, y completar los valores faltantes con0
utilizando el argumentofill
.{r}
df <- df %>%
complete(id, year_month = seq(min(year_month), max(year_month), by = "month"), fill = list(month_diff = 0))
Esto nos dará el resultado deseado como se muestra en la pregunta.