r - End of previous quarter / last day of previous quarter -
using lubridate
, how calculate last day of previous quarter given date? below formula doesn't seem work nov 3rd, 2014 (other dates work)
library(lubridate) date = as.posixct("2014-11-03") date - days(day(date)) - months(month(date) %% 3 - 1) # na
interesting enough, changing order works:
date - months(month(date) %% 3 - 1) - days(day(date)) # "2014-09-30 utc"
here possibilities functions packages zoo
, timedate
, , base
r. zoo
code improved @g.grothendieck, , suggested base
alternative (thanks lot!). leave lubridate
solution(s) else.
first, use class
yearqtr
in package zoo
represent quarterly data. may use as.date.yearqtr
, frac
argument "which number between 0 , 1 inclusive indicates fraction of way through period result represents. default 0 means beginning of period" (see ?yearqtr
, , ?yearmon
frac
).
step step:
library(zoo) date <- as.date("2014-11-03") # current quarter current_q <- as.yearqtr(date) current_q # [1] "2014 q4" # first date in current quarter first_date_current_q <- as.date(current_q, frac = 0) first_date_current_q # [1] "2014-10-01" # last date in previous quarter last_date_prev_q <- first_date_current_q - 1 last_date_prev_q # [1] "2014-09-30"
and short version @g.grothendieck (thanks!)
as.date(as.yearqtr(date)) - 1 # [1] "2014-09-30"
a nice base
r solution @g.grothendieck
as.date(cut(date, "quarter")) - 1 # [1] "2014-09-30"
another possibility use timefirstdayinquarter
, timelastdayinquarter
functions in package timedate
:
library(timedate) timelastdayinquarter(timefirstdayinquarter(date) - 1) # gmt # [1] [2014-09-30]
Comments
Post a Comment