在R中生成月份最后一天的日期序列

时间:2017-12-02 10:43:30

标签: r date sequence

如果我给出开始日期和结束日期,以及频率,我应该能够从头到尾生成一系列日期,以便

1)日期是该月的最后一天。 2)我可以将序列的频率设置为任何因子12(12个月)。如果频率为3,则表示存在4个月的间隔或间隔。

对于(1),以下函数给出了一个间隔为3个月(即每季度)的输出,但它没有给出该月最后一天的日期。

    DateSeq<-function(st,en, freq){
    seq(st, en, by = paste(as.character(12/freq), "months"))
    }
    DateSeq(as.Date("2015-01-01"),as.Date("2018-03-03"),4)

如何将此转换为最后一天给我的序列。给我一个简单的代码。

2 个答案:

答案 0 :(得分:1)

我们可以在{ "_id" : ObjectId("59fb46ed560e1a2fd5b6fbf4"), "customerId" : 2863318, "groupId" : 309, "questions" : [ { "questionId" : 567, "status" : 0, "_id" : ObjectId("59fb46ee560e1a2fd5b700a4"), }, { "questionId" : 711, "status" : 0, "_id" : ObjectId("59fb46ee560e1a2fd5b700a3") }, .... 使用seq as.yearmon之前将开始日期和结束日期更改为月初,然后通过同一转换将其转换为月的最后一天通过zoo

as.yearmon

答案 1 :(得分:1)

这会给出一系列月末日期,从st的年/月到en的年/月。

library(zoo)
as.Date(seq(as.yearmon(st), as.yearmon(en), by = 1 / freq), frac = 1)

上述sten可以是任何转换为​​yearmon的类,包括yearmon本身,Date,字符串或数字。例如,"2000-02-01""2000-02"as.Date("2000-02-01")2000+1/12

如果en是日期,并且序列的结束日期不应晚于en,则将as.yearmon(en)替换为以下,如果en减去1/12不是在月底。

as.yearmon(en) - (as.Date(en) < as.Date(as.yearmon(en), frac = 1)) / 12

同样,如果st是一个日期,并且序列的开始日期不应晚于st,请使用相同的想法减去1/12,如果st不在最后用

替换as.yearmon(st)的月份
as.yearmon(st) - (as.Date(st) < as.Date(as.yearmon(st), frac = 1)) / 12

关于我们是否真的需要约会有一些问题,因为它们总是在月底。似乎要点是创建年/月序列,而月末日期只是表示它的一种方式。  一种更简单的方法是直接使用yearmon序列。

seq(as.yearmon(st), as.yearmon(en), by = 1 / freq)