如果我给出开始日期和结束日期,以及频率,我应该能够从头到尾生成一系列日期,以便
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)
如何将此转换为最后一天给我的序列。给我一个简单的代码。
答案 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)
上述st
和en
可以是任何转换为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)