我有开始和结束日期,例如03-05-2014和01-07-2014。我想创建一个代码,以便输出序列,例如每个月的下个月15日或下个月的下一个结束日,在这种情况下,15-05-2014& 15-06-2014,或31-05-2014和31-06-2014。
我知道这可以通过创建日期序列,然后在seq(1st date, 2nd date, by = "day")
中识别特定日期(至少对于第一种情况),但我们只是说,由于计算限制,这是不可能的 - 我必须创建它多年以及数百万条需要分组的记录。
那里有解决方法吗?
答案 0 :(得分:2)
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
按月排序,并使用floor_date
包中的lubridate
从月初开始。
答案 1 :(得分:1)
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"