Often you may want to calculate the age of an individual in R.
Fortunately this is easy to do by using the interval() function from the lubridate package in R, which is designed to perform this exact task.
The interval() function uses the following basic syntax:
interval(start = NULL, end = NULL)
where:
- start: The starting date
- end: The ending date
The following example shows how to use the interval() function from the lubridate package to calculate ages in practice.
Note: Before using the interval() function, you may need to first install the lubridate package by using the following syntax:
install.packages('lubridate')
Once the lubridate package is installed, you can use the interval() function.
Example: How to Calculate Age Using lubridate in R
Suppose we create the following data frame named df that contains information about various employees at some company:
#create data frame df <- data.frame(birth_date=c('2001-01-03', '1995-02-15', '1990-05-09', '2002-08-10', '1980-10-14', '1967-12-30'), sales=c(130, 98, 120, 88, 94, 100)) #view data frame df birth_date sales 1 2022-01-03 130 2 2022-02-15 98 3 2023-05-09 120 4 2023-08-10 88 5 2024-10-14 94 6 2024-12-30 100
This data frame contains the following columns:
- birth_date: The birth date of the employee
- sales: The total sales made by the employee during their tenure
Suppose that we would like to calculate the age of each employee in the data frame.
To do so, we will need to calculate the difference between their birth date and the current date.
We can use the interval() function from the lubridate package to do so:
library(lubridate) ##add new column that calculates age of employee df$age <- as.period(interval(start=df$birth_date, end=Sys.Date())) #view updated data frame df birth_date sales age 1 2001-01-03 130 23y 4m 25d 0H 0M 0S 2 1995-02-15 98 29y 3m 13d 0H 0M 0S 3 1990-05-09 120 34y 0m 19d 0H 0M 0S 4 2002-08-10 88 21y 9m 18d 0H 0M 0S 5 1980-10-14 94 43y 7m 14d 0H 0M 0S 6 1967-12-30 100 56y 4m 28d 0H 0M 0S
Notice that a new column has been added to the data frame named age that contains the age of each employee.
For example:
- The first employee is 23 years, 4 months and 25 days old.
- The second employee is 29 years, 3 months and 13days old.
- The third employee is 34 years, 0 months and 19 days old.
And so on.
Note that the interval() function includes the hours, minutes and seconds for the age of the person as well.
Note that the Sys.Date() function returns the current date, which allows to use the current date as the “end date” in the interval() function to calculate the current age of each employee in the data frame.
Note that we could also use the year() function to only extract the year from each value in the resulting age() column if we would like:
library(lubridate) ##add new column that calculates age of employee in years df$age <- year(as.period(interval(start=df$birth_date, end=Sys.Date()))) #view updated data frame df birth_date sales age 1 2001-01-03 130 23 2 1995-02-15 98 29 3 1990-05-09 120 34 4 2002-08-10 88 21 5 1980-10-14 94 43 6 1967-12-30 100 56
Notice that the age column now only contains the years of age for each corresponding employee instead of including the months, days, hours, minutes and seconds.
Note: You can find the complete documentation for the interval() function from the lubridate package here.
Additional Resources
The following tutorials explain how to perform other common tasks in R:
How to Generate a Sequence of Dates with Lubridate in R
How to Convert Character to Date Using Lubridate in R
How to Get First or Last Day of Month Using Lubridate in R