[R] Remove 100 years from a date object

Gabor Grothendieck ggrothendieck at gmail.com
Fri Dec 10 17:38:11 CET 2010

On Fri, Dec 10, 2010 at 10:27 AM, Daniel Brewer <daniel.brewer at icr.ac.uk> wrote:
> Hello,
> I have some data that has dates in the form 27.02.37.  I convert them to
> a date object as follows:
> as.Date(data$date,format="%d.%m.%y")
> But this gives me years such as 2037 when I would like them to be 1937.
>  I thought of trying to take off some time i.e.
> as.Date(camCD$DoB,format="%d.%m.%y") - 100*365
> But that doesn't seem to work out correctly.  Any ideas how to do this?

The easiest is just to use chron dates since it uses a cut.off of 30
by default.   That is, if yy is less than that then 2000+yy is used
and if greater than that then 1900+yy is used.

Thus try this:

d <- "27.02.37"
as.Date(dates(d, format = "d.m.y")) # "1937-02-27"
as.Date(d, format = "%d.%m.%y")  # "2037-02-27"

Also if that is not good enough and you want a different value for the
cut.off then note that the default in chron is to use the year.expand
function to expand two digit dates but you can change that via
something like this:

options(chron.year.expand = function(..., cut.off = 25)
year.expand(..., cut.off = cut.off))

Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com

More information about the R-help mailing list