Demystifying Dates: Finding the Day of the Week in R with lubridate


Steven P. Sanderson II, MPH


February 9, 2024


Have you ever stared at a date in R and wondered, “What day of the week was this?!” Fear not, fellow data wranglers! Today, we embark on a journey to conquer this seemingly simple, yet surprisingly tricky, task. Buckle up, because we’re about to become date whisperers with the help of the lubridate package.

The Power of lubridate

R’s built-in date functions are decent, but lubridate takes things to a whole new level. Think of it as a Swiss Army knife for everything date-related. It offers a wider range of functions, clear syntax, and handles different date formats like a champ.

Unveiling the Mystery: Extracting the Day of the Week

There are two main approaches to finding the day of the week in lubridate:

Example 1: Using wday()

This function is your go-to for both numeric and character representations of the day. Let’s break it down:


# Sample date
date <- ymd("2024-02-09")

# Numeric day (Monday = 1, Sunday = 7)
numeric_day <- wday(date)
print(numeric_day)  # Output: 6 (Friday)
[1] 6
[1] "numeric"
# Character day (full name)
full_day <- wday(date, label = TRUE)
print(full_day)  # Output: Friday
[1] Fri
Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
[1] "ordered" "factor" 
# Character day (abbreviated)
abbrev_day <- wday(date, label = TRUE, abbr = TRUE)
print(abbrev_day)  # Output: Fri
[1] Fri
Levels: Sun < Mon < Tue < Wed < Thu < Fri < Sat
[1] "ordered" "factor" 

Example 2. Using strftime()

This function offers more flexibility in formatting dates, including extracting the day of the week.

# Same date as before
date <- ymd("2024-02-09")
[1] "Date"
# Day of the week (full name)
full_day <- strftime(date, format = "%A")
print(full_day)  # Output: Friday
[1] "Friday"
[1] "character"
# Day of the week (abbreviated)
abbrev_day <- strftime(date, format = "%a")
print(abbrev_day)  # Output: Fri
[1] "Fri"
[1] "character"

Beyond the Basics: Customizing Your Output

Both wday() and strftime() offer options to personalize your results. For example, you can change the starting day of the week (default is Monday) or use different formatting codes for the day name.

Bonus Tip: Check out the lubridate documentation for more advanced options and functionalities!

Time to Play!

Now it’s your turn to experiment! Here are some ideas:

  • Find the day of your birthday in R.
  • Analyze historical data and see how weekdays affect specific variables.
  • Create a calendar visualization with the day of the week displayed.

Remember, the more you practice, the more comfortable you’ll become with manipulating dates in R. So, dive in, explore, and have fun!

P.S. Don’t forget to share your creations and questions in the comments below. The R community is always happy to help!