[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