每个月的下一个 15 日或最后一天的日期序列

Sequence of dates by each next 15th or last day of month

我有开始日期和结束日期,例如03-05-2014 和 01-07-2014。我想创建一个代码,以便它输出序列,例如每个月的下一个 15 日或该月的下一个结束日,在本例中为 15-05-2014 和 15-06-2014,或 31-05-2014 和2014 年 6 月 31 日。

我知道这可以通过创建日期序列然后识别特定日期(至少对于第一种情况)如 seq(1st date, 2nd date, by = "day") 中那样来实现,但我们只是说由于计算限制这是不可能的- 我必须创建它很多年,数百万条记录也需要分组。

有什么解决办法吗?

d1 = as.Date("03-05-2014", "%d-%m-%Y")
d2 = as.Date("01-07-2014", "%d-%m-%Y")

library(lubridate)
d1_p = round_date(d1, unit = "month")
d2_p = round_date(d2, unit = "month")    
mydates = seq.Date(d1_p, d2_p, "months")
mydates = mydates[mydates < d2_p]

lapply(mydates, function(x) x + 14:15)
#[[1]]
#[1] "2014-05-15" "2014-05-16"

#[[2]]
#[1] "2014-06-15" "2014-06-16"

ceiling_date(mydates, unit = "month") - 1 
#[1] "2014-05-31" "2014-06-30"
start <- as.Date("2014-05-03")
end <- as.Date("2014-07-01")

library(lubridate)
floor_date(seq(start, end, by = 'month'), unit = "month") + 14
ceiling_date(seq(start, end, by = 'month'), unit = "month")-1

按月排序并使用 lubridate 包中的 floor_date 从月初开始。