【问题标题】:Dates, lubridate incrementing by 1 month [duplicate]日期,润滑日期增加 1 个月 [重复]
【发布时间】:2016-02-04 20:12:46
【问题描述】:

我无法使用 lubridate 从 2013 年 9 月 30 日(9 月最后一天)到 2013 年 10 月 31 日(10 月最后一天)增加 1 个月。

文档中提供的示例效果很好:

# get a vector of months (last day of the month)
vct_dates <- ymd("2013-01-31") %m+% months(0:11)

下面给出了 2013-10-31 的预期:

vct_dates[10]

并且,以下给出 2013-09-30:

vct_dates[9]

但是,当我尝试将 2013-09-30 增加一个月时,我得到了错误的答案:

# should be 2013-10-31 but is 2013-10-30
vct_dates[9] %m+% months(1)

有什么想法吗...?

【问题讨论】:

  • “但是,当我尝试将 2013-09-30 增加一个月时,我得到了错误的答案”。实际上,它给了你正确的答案。
  • 好的,谢谢 PL...“我收到的答案与我的预期不同”

标签: r lubridate


【解决方案1】:

R 和 lubridate 都没有“一个月的最后一天”的概念。但是你可以欺骗它:取下个月的第一天,将其增加一个月——然后减去一天:

R> seq(as.Date("2016-10-01"), by="1 month", len=2)-1
[1] "2016-09-30" "2016-10-31"
R> 

这可以在没有任何附加包的基础 R 中使用。

【讨论】:

  • 这太棒了!
【解决方案2】:

怎么样:

vct_dates <- (ymd("2013-09-30") + days(1))  %m+% months(0:11) + days(-1) 

【讨论】:

    猜你喜欢
    • 2013-07-14
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多