【问题标题】:Generate a sequence of time using R and lubridate使用 R 和 lubridate 生成时间序列
【发布时间】:2017-07-03 05:48:24
【问题描述】:

有没有一种有效的方法来生成带有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))

错误:持续时间类不兼容(持续时间,数字)。请用as.duration强制。

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


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

【问题讨论】:

  • seq(today(), today()+dyears(1), by='weeks)
  • 只需使用seq.Date。这有点神奇;你可以把它传递给by = '2 weeks',它会解决的。
  • 谢谢@GGamba,我没有意识到可以在by= 中为seq() 指定“周”和“年”
  • @alistaire,谢谢。这也很有效。
  • 当您访问?seq 页面时,您应该还点击了指向?seq.Date 的链接,在那里答案将变得显而易见。

标签: r date lubridate tidyverse


【解决方案1】:

你可以尝试使用 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 2021-10-20
    • 1970-01-01
    相关资源
    最近更新 更多