使用R和lubridate生成时间序列

7

有没有一种有效的方法,可以使用 tidyverselubridate 生成时间序列向量?我知道当使用日期数量作为间隔时,这两个工具可以与 seq() 一起使用。例如,对于以下输入:

seq(today(), today()+dyears(1), 60)

您可以通过60天的间隔获取一系列日期。

"2017-02-14" "2017-04-15" "2017-06-14" "2017-08-13" "2017-10-12" "2017-12-11" "2018-02-09"

然而,是否有任何方法可以使其在几周几个月几年内工作?也许类似于下面的代码,我认为它应该可以工作,但实际上并没有:
seq(as_date(2000-01-01), as_date(2017-01-01), dyears(1))

错误:不兼容的持续时间类(Duration,数字)。请使用as.duration进行强制转换。

我知道如果只需要年或月的近似值,可以将dyears(1)更改为36530,但我想知道是否有更聪明的方法考虑闰年和月份。


为了提供更多背景信息,我想生成一个日期向量,以便可以自定义ggplot中的scale_x_date。我希望这个图表显示所有单独的年份,甚至是每三个月的周期(如果可能的话),而不是让waiver()显示2000、2003、2006、2009。


4
生成一个从今天起,到一年后的日期序列,以每周为间隔。 - GGamba
2
只需使用 seq.Date。它有点神奇;你可以传递 by='2 weeks',然后它就会自动计算。 - alistaire
谢谢,@GGamba,我没有意识到在 seq()by= 中可以指定“周”和“年”。 - Carl H
@alistaire,谢谢。这也非常好用。 - Carl H
当您在?seq页面时,您也应该按照到?seq.Date的链接,这样答案就变得明显了。 - IRTFM
@42- 这是完全公平的。我应该更深入地研究文档。 - Carl H
1个回答

4
您可以尝试使用seq.Date()函数:
seq.Date(from=as.Date("2000-01-01"), to=as.Date("2010-01-01"), by="month")

或者:

seq(as.Date("2000/1/1"), by = "month", length.out = 12)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接