I have a vector of dates. I wish to find the month end date for each. Any suggestions? e.g. For 12/15/05, I want 12/31/05, For 10/15/1995, I want 10/31/1995, etc __________________________________________________ [[alternative HTML version deleted]]
Here is one way using POSIX: (you can create a function to do this)> x <- as.POSIXlt('2005-12-16') # a date > x[1] "2005-12-16"> dput(x) #structure of the datestructure(list(sec = 0, min = 0, hour = 0, mday = 16, mon = 11, year = 105, wday = 5, yday = 349, isdst = 0), .Names = c("sec", "min", "hour", "mday", "mon", "year", "wday", "yday", "isdst" ), class = c("POSIXt", "POSIXlt"))> x$mday <- 1 # reset to first of the month > seq(x, by='month', length=2)[2] # select 2nd number in the sequence[1] "2006-01-01 EST">On 12/19/05, t c <quantpm@yahoo.com> wrote:> > I have a vector of dates. > > I wish to find the month end date for each. > > Any suggestions? > > e.g. > > For 12/15/05, I want 12/31/05, > > For 10/15/1995, I want 10/31/1995, etc > > > __________________________________________________ > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html >-- Jim Holtman Cincinnati, OH +1 513 247 0281 What the problem you are trying to solve? [[alternative HTML version deleted]]
Gabor Grothendieck
2005-Dec-19 16:58 UTC
[R] given a mid-month date, get the month-end date
The zoo package has a yearmon class with as methods which can be used: library(zoo) dd <- Sys.Date() # test data as.Date(as.yearmon(dd), frac = 1) as.yearmon converts the "Date" class date to a year and month of class "yearmon" dropping the day and representing it internally in a way consistent with "ts" class. as.Date above then converts it back to "Date" class. Since yearmon dates have no day (they are just a year and a month) the frac argument is used to indicate what fraction of the month to use as the day of the month so frac = 0 (the default) would give the beginning of the month) and frac = 1 gives the end. On 12/19/05, t c <quantpm at yahoo.com> wrote:> I have a vector of dates. > > I wish to find the month end date for each. > > Any suggestions? > > e.g. > > For 12/15/05, I want 12/31/05, > > For 10/15/1995, I want 10/31/1995, etc > > > __________________________________________________ > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html >
Or add a month, then subtract a day: Ndays <- function(posix.ct.dates,days) { # one day = 60*60*24 = 86400 seconds ans <- as.POSIXct(posix.ct.dates) + 86400*days # we only have a problem if the date went from # DST to ST or from ST to DST ans + (as.POSIXlt(posix.ct.dates)$isdst - as.POSIXlt(ans)$isdst)*3600 } calendar.eom <- function(x) { x.lt <- as.POSIXlt(x) mon <- x.lt $mon + 2 year <- x.lt$year # if month was December add a year year <- year + as.integer(mon==13) mon[mon==13] <- 1 Ndays(ISOdate(1900+year,mon,1,hour=0,tz=attr(x,"tzone")),-1) } x <- seq(as.POSIXct("2001-01-10"),as.POSIXct("2005-12-10"),by="months") data.frame(before=x,after=calendar.eom(x)) -----Original Message----- From: r-help-bounces at stat.math.ethz.ch [mailto:r-help-bounces at stat.math.ethz.ch] On Behalf Of Gabor Grothendieck Sent: Monday, December 19, 2005 11:59 AM To: t c Cc: r-help Subject: Re: [R] given a mid-month date, get the month-end date The zoo package has a yearmon class with as methods which can be used: library(zoo) dd <- Sys.Date() # test data as.Date(as.yearmon(dd), frac = 1) as.yearmon converts the "Date" class date to a year and month of class "yearmon" dropping the day and representing it internally in a way consistent with "ts" class. as.Date above then converts it back to "Date" class. Since yearmon dates have no day (they are just a year and a month) the frac argument is used to indicate what fraction of the month to use as the day of the month so frac = 0 (the default) would give the beginning of the month) and frac = 1 gives the end. On 12/19/05, t c <quantpm at yahoo.com> wrote:> I have a vector of dates. > > I wish to find the month end date for each. > > Any suggestions? > > e.g. > > For 12/15/05, I want 12/31/05, > > For 10/15/1995, I want 10/31/1995, etc > > > __________________________________________________ > > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at stat.math.ethz.ch mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide! > http://www.R-project.org/posting-guide.html >______________________________________________ R-help at stat.math.ethz.ch mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html