[R] Getting the last day of the month.

Patnaik, Tirthankar tirthankar.patnaik at citi.com
Thu May 10 15:42:20 CEST 2007


Hi,
	Given a date, how do I get the last date of that month? I have
data in the form YYYYMM, that I've read as a date using

> x$Date <-
as.Date(ISOdate(substr(x$YearEnd,1,4),substr(x$YearEnd,5,6),1))

But this gives the first day of the month. To get the last day of the
month, I tried 

> as.Date(as.yearmon(x$Date,frac=0))

But I don't get the last day of the month here. (Tried frac=1 too.)

I then add a month to the date, substract one day from the resultant
date. But this wouldn't work for December.

> x$YearEnd
 [1] 200203 200303 200403 200503 200603 200603 200312 200503 200603
200203 200303
[12] 200403 200503 200512 200612 200203 200303 200403 200503 200603
> 
> x$Date <- as.Date(ISOdate(substr(x$YearEnd,1,4),
+ as.integer(substr(x$YearEnd,5,6))+1,
+ 1))-1
> x$Date
 [1] "2002-03-31" "2003-03-31" "2004-03-31" "2005-03-31" "2006-03-31"
"2006-03-31"
 [7] NA           "2005-03-31" "2006-03-31" "2002-03-31" "2003-03-31"
"2004-03-31"
[13] "2005-03-31" NA           NA           "2002-03-31" "2003-03-31"
"2004-03-31"
[19] "2005-03-31" "2006-03-31"

So I add a year, and set the month to 1 in a quick function.

> GetEOM <- function(yyyymm=200406){
	year <- as.integer(substr(yyyymm,1,4))
	month <- as.integer(substr(yyyymm,5,6))
	if (month==12){
		date <- as.Date(ISOdate(year+1,1,1))-1
	}else{
		date <- as.Date(ISOdate(year,month+1,1))-1
	}
	print(date)
}

x$Date <- as.vector(sapply(x$YearEnd,GetEOM))

str(x$Date)


Is there a simpler way to do this please?


TIA and best,
-Tir

Tirthankar Patnaik
India Strategy
Citigroup Investment Research
+91-22-6631 9887



More information about the R-help mailing list