每个月的下一个 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
从月初开始。
我有开始日期和结束日期,例如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
从月初开始。