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

Dom*_* Jo 3 r date sequence

如果我给出开始日期和结束日期以及频率,我应该能够生成从开始到结束的日期序列,这样

1)日期是当月的最后一天。2)我可以将序列的频率设置为 12 的任何因子(wrt 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)
Run Code Online (Sandbox Code Playgroud)

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

G. *_*eck 7

这给出了从年/月st到年/月的月末日期序列en

library(zoo)
as.Date(seq(as.yearmon(st), as.yearmon(en), by = 1 / freq), frac = 1)
Run Code Online (Sandbox Code Playgroud)

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

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

as.yearmon(en) - (as.Date(en) < as.Date(as.yearmon(en), frac = 1)) / 12
Run Code Online (Sandbox Code Playgroud)

同样,ifst是一个日期,并且序列的开始日期应该不迟于st使用相同的想法减去 1/12 如果st不是在月末替换as.yearmon(st)

as.yearmon(st) - (as.Date(st) < as.Date(as.yearmon(st), frac = 1)) / 12
Run Code Online (Sandbox Code Playgroud)

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

seq(as.yearmon(st), as.yearmon(en), by = 1 / freq)
Run Code Online (Sandbox Code Playgroud)