在下面的代码中,我试图完成一个日期序列。我的开始日期是 5 月 31 日,结束日期是 8 月 31 日。当我seq()
按下面的月份排序时,您会看到跳过了 2023 年 6 月,但 2023 年 7 月出现了两次(该月的第一天和最后一天)。我想按月份排序,这样每个月都会出现在两个日期之间的序列中。我该如何实现呢?
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"))
编辑第二个例子
使用下面 Jon 发布的代码,它适用于我的第一个示例。但是,如果开始日期从每月的第一天开始,我会再次得到重复的月份。可以解决这个问题吗?
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)