【问题标题】:Why is R seq.Date is skipping months为什么 R seq.Date 跳过几个月
【发布时间】:2018-02-15 14:57:42
【问题描述】:

当我想列出两个日期之间的所有月份时,seq.Date 似乎会跳过日期。我肯定在某处的代码中犯了错误,但它是如此简单,似乎无法正确。

我们将不胜感激。

seq.Date(as.Date("2017-01-31"),as.Date("2017-06-30"),by = "months")

问候, 阿克塞尔

【问题讨论】:

标签: r


【解决方案1】:

如果您确实需要该月的最后一天,一种可能性是构造随后个月的第一天的序列,然后减去 1 天。例如:

> seq.Date(as.Date("2017-02-01"),as.Date("2017-07-01"),by = "months") - 1
[1] "2017-01-31" "2017-02-28" "2017-03-31" "2017-04-30" "2017-05-31" "2017-06-30"

【讨论】:

    【解决方案2】:

    因为你的日期是当月的最后一天,我相信 seq.Date 会加上它开始月份的天数。

    如果我们查看您示例输出的diff

    seq.Date(as.Date("2017-01-31"),as.Date("2017-06-30"),by = "months")
    [1] "2017-01-31" "2017-03-03" "2017-03-31" "2017-05-01" "2017-05-31"
    
    diff(seq.Date(as.Date("2017-01-31"),as.Date("2017-06-30"),by = "months"))
    Time differences in days
    [1] 31 28 31 30
    

    所以看起来seq.Date 增加了 31 天,因为它从 1 月开始,然后增加了 2 月的 28 天等等。

    使用不同的日期可能会更好,并且可能结合一些润滑floor_dateceiling_date

    【讨论】:

    • 非常感谢!解释也很受欢迎。
    【解决方案3】:

    我认为另一种解决方案可能是将您的初始日期减少到当月的第一天,并在生成序列后,使用包bsts 中的函数LastDayInMonth

    initial_date <- as.Date("2017-01-31")
    day(initial_date) <- 1 # This is only in case you can't use first date of month
    # in the initial assignment.
    # As when you have several dates and you want to automate process.
    desired_sequence <- seq.Date(initial_date,as.Date("2017-06-30"),by = "months")
    library(bsts)
    desired_sequence <- LastDayInMonth(desired_sequence)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-17
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多