R lubridate: How To Efficiently Work With Dates and Times in R
Data analytics and programming don’t often have a lot of things in common. But where they’re almost indistinguishable is the topic of dates. The skill of working with datetimes is an integral part of both areas and is something you’ll want to master sooner rather than later.
Newcomers often find this area challenging due to the sheer amount of options available, but the truth is that you’ll only need 5% of the functionality on a daily basis, and the rest you can quickly find online. Today, we’ll show you this 5% through a set of 15 useful examples with R lubridate.
But first, what is R lubridate, and what makes it better than the competition? Let’s answer that next.
Functional programming in R? Here’s everything you need to know.
Table of contents:
Why R Lubridate?
You can think of R
lubridate as a comprehensive R package specifically designed to simplify the working process with dates and times. It’s part of tidyverse, so it aligns nicely with the philosophy of clear and expressive coding.
The package brings to the table a set of intuitive functions that make it easy for developers and data professionals to perform common tasks such as parsing dates, performing date arithmetic, and handling time zones.
One of the main reasons you want to consider using lubridate over the other datetime packages in R is its user-friendly and intuitive syntax. Traditional R functions are often verbose and complex, and lubridate is here to simplify things. For this reason, lubridate is also appealing to beginners and those who care about code simplicity and maintainability.
The rest of the article assumes you have lubridate installed and loaded. Use the following command to import it:
Up next, we’ll go over 15 concrete and useful examples so you can see why lubridate is so heavily used and loved by data professionals.
15 Examples to Master R Lubridate
This section will get you started working with R lubridate. It doesn’t matter if you’re a newcomer to R and programming in general – the examples will be simple to follow and easy to understand.
1. Get the Current Date and Time
You can use the
now() function in lubridate to get the current date and time based on your system’s time zone. The function doesn’t require any parameters.
It is particularly useful when you need a timestamp for the exact moment when your script is running, such as logging events, timestamping transactions, or creating time-sensitive data entries:
current_time <- now() current_time
2. Extract Date Components
year() functions are handy for extracting the respective date components from date objects. Each function expects a date or datetime object as the input.
These functions are great for breaking down a date into its constituent parts, which is useful for analysis, reporting, and data processing tasks where you need to categorize or compare data based on these individual components:
day(now()) month(now()) year(now())
3. Parse Date From Character Strings
You can use the
dmy() functions to parse character strings into date objects. They expect the format to be year-month-day, month-day-year, and day-month-year, as the function name suggests.
They are crucial for converting date strings from various sources into a standardized date format that R can understand and manipulate:
ymd("20231113") mdy("11/13/2023") dmy("13-11-2023")
4. Convert to Datetime From Other Formats
as_datetime() function is used to convert different date and time formats into POSIXct, a common datetime format in R. It accepts a wide range of inputs like character strings, numeric types, and factors.
This function is invaluable for standardizing datetime information into a format suitable for analysis and keeping track of your data over time in general:
5. Find the Difference Between Dates
Subtracting two date objects in lubridate gives you the difference in time between them. This is a handy operation you’ll do pretty often and it doesn’t require a specific function – just subtract two dates the same way you would with numbers.
You can use this technique in many areas like project planning, age calculation, and time series analysis:
start_date <- ymd("20231101") end_date <- ymd("20231113") time_difference <- end_date - start_date time_difference
6. Add or Subtract Time Units
years() functions can be used to create Period objects representing a specified number of days, months, or years. These can be added to or subtracted from date objects.
A practical application of these functions would be calculating future dates (e.g., deadlines or anniversaries) or past dates (e.g., historical analysis):
future_date <- now() + days(5) future_date past_date <- now() - months(3) past_date
7. Compare Dates
Date objects in R can be compared using standard comparison operators like
>. This doesn’t require a specific lubridate function – just compare the dates exactly the same as you would numbers.
Date comparison is essential for sorting, filtering, or conditional operations based on dates:
ymd("20231101") < ymd("20231029") ymd("20231101") > ymd("20231029")
8. Round Dates to the Nearest Unit
round_date() function, as the name suggests, rounds a date to the specified time unit, such as “month” or “year”.
This function is useful when you need to normalize dates for comparison or aggregation, like summarizing data on a monthly or yearly basis:
9. Working with Time Zones
You can use the
with_tz() function to change the time zone of a datetime object without changing the actual time. It expects a datetime object and a string representing the time zone.
This function is crucial for handling data collected across different time zones, and ensures consistent and accurate time representations:
with_tz(now(), tzone = "UTC") with_tz(now(), tzone = "EST")
10. Calculate Age from a Birthdate
If you want a practical use case of different lubridate functions, look no more. You can combine the
years(1) to calculate the age from a birthdate by creating a time interval and dividing it by one year.
These calculations are widespread in demographics, marketing, and other fields where age is a significant factor, especially when represented as a floating point number:
birthdate <- ymd("1985-12-15") age <- interval(birthdate, now()) / years(1) age
11. Format Date Output
format() function in R isn’t specific to lubridate, but allows you to format date or POSIXct objects into character strings in different formats.
This function is highly useful for preparing date-time data for reports, presentations, or exporting to other systems:
format(now(), "%A, %d %B %Y")
12. Create a Date Sequence
seq() function, when used with date objects, generates a sequence of dates. The function requires start and end dates and a step size (e.g., “days”). Think of this last parameter as an interval.
This function is useful for creating time series data, finding missing dates in your time series, and so on:
seq(ymd("20231001"), ymd("20231031"), by = "days")
13. Handle Leap Years
You can use the
leap_year() function to check whether a year is a leap year or not. It’s nothing you can’t implement on your own with the modulus operator, but this function is still the more convenient way to get the same functionality.
This function is critical in calendar calculations, especially in applications that require precise date calculations, like age calculation or scheduling:
14. Work With Durations and Periods
period() functions are used to create Duration and Period objects representing time spans. The first one represents exact time spans, while the second one respects calendar conventions.
These functions are useful for precise time calculations and for handling regular time spans in scheduling:
duration(60, "seconds") period(2, "hours")
15. Extract Weekdays
wday() function is used to extract a weekday from a given date object, either as an index integer or as a factor. Setting the optional
label parameter to
TRUE will give you the actual day name.
It’s more or less a convenience function used when you want to aggregate or analyze data based on the day of the week:
wday(now()) wday(now(), label = TRUE)
Summing up R Lubridate
And there you have it – a brain-friendly introduction to working with dates and times with R lubridate. We think these 15 examples will be enough for most of the date-related things you’ll want to do. Anything more complex will typically boil down to combining a couple of functions shown today.
What do you think of R lubridate? Is it the package you use daily to handle date and time manipulations? If so, what’s your most commonly used function? Make sure to let us know in the comment section below.
Coming to R from Excel? Here’s a couple of advanced Excel-like functions in R for effective data manipulation.