【问题标题】:Get beginning of next quarter from current Date in R从R中的当前日期获取下个季度的开始
【发布时间】:2016-05-05 04:42:10
【问题描述】:

我正在尝试从当前日期开始下个季度。

library(lubridate)
current_date = Sys.Date()
quarter(Sys.Date(), with_year= TRUE) 

或者从函数quarters.Date(Sys.Date())我可以得到四分之一。我无法在上面的代码中添加四分之一。

我可以使用任何其他包或默认包中的任何其他功能来执行此操作吗?

【问题讨论】:

    标签: r date data-manipulation


    【解决方案1】:

    1) zoo 转换为 "yearqtr" 类,添加 1/4,如果您想要季度末的日期,请使用 frac = 1 应用 as.Date

    library(zoo)
    
    today <- Sys.Date()  # 2016-01-27
    as.Date(as.yearqtr(today) + 1/4, frac = 1)
    ## [1] "2016-06-30"
    

    如果您想要季度的开始,请省略 frac=1。如果你想要 "yearqtr" 对象,请省略 as.Date

    as.yearqtr(today) + 1/4
    [1] "2016 Q2"
    

    2) R 的基。这将给出下一季度的开始日期,没有包。我们使用cut 获取当前季度的开始,转换为"Date" 类并添加足够的天数以进入下一个季度并再次申请cutas.Date

    as.Date(cut(as.Date(cut(today, "quarter")) + 100, "quarter"))
    ## [1] "2016-04-01"
    

    如果您想在季度末添加足够的天数以到达下一个季度的第二个季度并减去 1 天以到达上一季度末:

    as.Date(cut(as.Date(cut(today, "quarter")) + 200, "quarter")) - 1
    ## [1] "2016-06-30"
    

    【讨论】:

    • 谢谢@G Grothendieck.. 使用上面我可以获得所需的日期,然后使用 Quarters.Date() ,我可以获得季度。只是想知道我们是否可以从 yearqtr 对象访问 year 和 qtr?
    • 如果yq &lt;- as.yearqtr(today) 那么format(yq, "%Y")format(yq, "%q")floor(as.numeric(yq))cycle(yq) 是各种方式。
    【解决方案2】:

    上面的答案确实有效。如果您想利用 lubridate 库,可以使用以下内容:

    ceiling_date(current_date, "quarter")
    

    这将返回下一季度的第一个日期。其他类似的有用函数是 floor_date 和 round_date。两者都可以在 lubridate 文档中找到 - https://cran.r-project.org/web/packages/lubridate/lubridate.pdf.

    【讨论】:

    • 正如@Hangtime79 所说,要获得上一季度的结束日期,然后floor_date 将为您提供本季度的开始,然后减去一天以获得上一季度的最后一天,即lubridate::floor_date(current_date, "quarter") - 1。如果当前日期是 2020 年 10 月 31 日,那么这将返回 2020 年 9 月 30 日。
    猜你喜欢
    • 2014-02-06
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2019-12-02
    • 2021-12-29
    • 2019-04-10
    相关资源
    最近更新 更多