[R] Remove 100 years from a date object

Daniel Brewer daniel.brewer at icr.ac.uk
Fri Dec 10 17:40:39 CET 2010



On 10/12/2010 4:17 PM, Barry Rowlingson wrote:
> On Fri, Dec 10, 2010 at 3:27 PM, 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?
> 
> Normally to adjust dates you can use as.difftime() and do arithmetic,
> but a year is a variable thing (can be 365 or 366 days) so you cant
> make a difftime of years. Days are variable things if you worry about
> leap seconds...
> 
> Also, you could end up with an invalid date if you have 29-Feb-2000
> and 29-Feb-1900. One wasn't a leap year...
> 
> A solution minus those caveats is to convert to POSIXlt and adjust the
> $year element:
> 
>  > dob="27.02.37"
>  > as.Date(dob,format="%d.%m.%y")
> [1] "2037-02-27"
>  > dobp = as.POSIXlt(as.Date(dob,format="%d.%m.%y"))
>  > dobp$year = dobp$year - 100
> 
>  > dobp
> [1] "1937-02-27 UTC"
>  > as.Date(dobp)
> [1] "1937-02-27"
> 
> although it might be easier to paste a '19' into your character variable
> 
>  > paste(substr(dob,1,6),"19",substr(dob,7,9),sep="")
> [1] "27.02.1937"
> 
> and then do it the way you started. Assumes you have leading zeroes on
> all fields though.
> 
> Barry

Many thanks.  Thats great

Dan

-- 
**************************************************************
Daniel Brewer, Ph.D.

Institute of Cancer Research
Molecular Carcinogenesis
Email: daniel.brewer at icr.ac.uk
**************************************************************

The Institute of Cancer Research: Royal Cancer Hospital, a charitable Company Limited by Guarantee, Registered in England under Company No. 534147 with its Registered Office at 123 Old Brompton Road, London SW7 3RP.

This e-mail message is confidential and for use by the a...{{dropped:2}}



More information about the R-help mailing list