从R中的当前日期开始下一季度的开始

Dat*_*ast 2 r date data-manipulation

我想从当前日期开始下个季度.

library(lubridate)
current_date = Sys.Date()
quarter(Sys.Date(), with_year= TRUE) 
Run Code Online (Sandbox Code Playgroud)

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

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

G. *_*eck 5

1)动物园转换为"yearqtr"类,加1/4,如果你想在本季度结束之日起适用as.Date使用frac = 1

library(zoo)

today <- Sys.Date()  # 2016-01-27
as.Date(as.yearqtr(today) + 1/4, frac = 1)
## [1] "2016-06-30"
Run Code Online (Sandbox Code Playgroud)

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

as.yearqtr(today) + 1/4
[1] "2016 Q2"
Run Code Online (Sandbox Code Playgroud)

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

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

如果你想在季度结束时增加足够的天数到达下一季度的第二天并且在1天后连续到达上一季度末:

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


小智 5

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

ceiling_date(current_date, "quarter")
Run Code Online (Sandbox Code Playgroud)

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