No código abaixo, estou tentando completar uma sequência de datas. Minha data de início é 31 de maio e a data de término é 31 de agosto. Quando eu seq()
por mês abaixo, você verá que junho de 2023 é pulado, mas julho de 2023 aparece duas vezes (primeiro e último dia do mês). Quero sequenciar por mês para que cada mês apareça na sequência entre as duas datas. Como posso fazer isso?
library(tidyverse)
df1 <- data.frame(id = "1",
startdate = as.Date( "2023-05-31"),
enddate = as.Date("2024-08-31")) %>%
mutate(date_duration = startdate,
enddate = ceiling_date(enddate, "month") -1 ) %>%
complete(date_duration = seq(startdate, enddate, by = "month"))
Editar segundo exemplo
Usando o código postado por Jon abaixo, funciona para meu primeiro exemplo. No entanto, se a data de início começar no primeiro dia do mês, recebo meses repetidos novamente. É possível contornar isso?
df1 <- data.frame(id = c("1","2"),
startdate = as.Date( c("2023-05-31", "2023-01-01")),
enddate = as.Date(c("2024-08-31", "2023-03-15")),
date_duration = as.Date( c("2023-05-31", "2023-01-01"))
) %>%
group_by(id) %>%
complete(date_duration = seq(ceiling_date(startdate, "month"),
ceiling_date(enddate, "month"),
by = "month") - 1)