【问题标题】:Given a date and get the beginning date of previous month using lubridate package [duplicate]给定日期并使用 lubridate 包获取上个月的开始日期[重复]
【发布时间】:2022-01-19 08:48:15
【问题描述】:

给定任何日期,我使用此代码从该日期获取上个月的开始日期:

library(lubridate)

end_date <- '2021-10-30'
floor_date(as.Date(end_date) - months(1), 'month')
[1] "2021-09-01"

但我发现它返回NA,因为日期的格式是%Y-%m-31

end_date <- '2021-10-31'
floor_date(as.Date(end_date) - months(1), 'month')
[1] NA

我们如何解释这个错误?谢谢。

【问题讨论】:

  • 我猜是因为没有 9 月 31 日。试试'2021-08-31',效果很好。
  • 对不起,我不这么认为,如果你检查:wincalendar.com/Calendar/Date/October-31-2021
  • 您提供的链接似乎没有回答我的问题,因为错误不是来自如何获得第一天,而是来自上个月@Limey
  • 您的错误的原因是 as.Date(2021-10-31) - months(1) 将返回 2021-09-31 但由于这一天不存在,它返回 NA。
  • 不保证每月 31 日存在。但是每个月的第一天是。因此,颠倒操作顺序以确保您在每个阶段都有一个有效的日期:lubridate::floor_date(as.Date(end_date), "month") - months(1),正如@Waldi 所建议的那样。

标签: r date lubridate


【解决方案1】:

你可以减去floor之后的月份:

end_date <- '2021-10-31'
floor_date(as.Date(end_date), 'month') - months(1)

[1] "2021-09-01"

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 2013-07-06
    • 2020-08-21
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多