Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Time difference in years with lubridate?

Tags:

r

lubridate

I would like to use lubridate to calculate age in years given their date of birth and today's date. Right now I have this:

library(lubridate) today<-mdy(08312015) dob<-mdy(09071982) today-dob 

which gives me their age in days.

like image 716
Ignacio Avatar asked Aug 31 '15 13:08

Ignacio


People also ask

What does Lubridate mean?

Lubridate is an R package that makes it easier to work with dates and times. Below is a concise tour of some of the things lubridate can do for you. Lubridate was created by Garrett Grolemund and Hadley Wickham, and is now maintained by Vitalie Spinu.

Is Lubridate part of Tidyverse?

lubridate is part of Hadley's tidyverse ecosystem but is not loaded by the tidyverse package, which includes only what he thought were the core components.


1 Answers

This is the lubridate approach I would take:

interval(dob, today) / years(1) 

Yields the answer of 32 years.

Note that the function will complain that it cannot express the remainder of the fraction of the year. This is because year is not a fixed concept, i.e. 366 in leap years and 365 in non-leap years. You can get an answer with more detail in regard to the number of weeks and days:

interval_period = interval(dob, today) full_year = interval_period %/% years(1) remaining_weeks = interval_period %% years(1) %/% weeks(1) remaining_days = interval_period %% years(1) %% weeks(1) %/% days(1) sprintf('Your age is %d years, %d weeks and %d days', full_year, remaining_weeks, remaining_days) # [1] "Your age is 32 years, 51 weeks and 1 days" 

Note that I use %/% for division and %% as modulo to get the remaining weeks/days after subtracting the full years/weeks.

like image 60
Paul Hiemstra Avatar answered Sep 23 '22 08:09

Paul Hiemstra