How to determine if date is a weekend or not (not using lubridate)

DonDyck picture DonDyck · Oct 18, 2014 · Viewed 24.7k times · Source

I have a vector of date objects (yyyy-mm-dd) and I want to determine if any of them are on weekend or not. Is there a function that can determine this straightaway?

I can use wday() in the lubridate package and then determine if returned value is 01 or 07, but anything else more straightforward?

x <- seq(Sys.Date()-10, Sys.Date(), by = 1)
x[lubridate::wday(x) %in% c(1, 7)]

Answer

Rich Scriven picture Rich Scriven · Oct 18, 2014

You can use the base R function weekdays().

x <- seq(Sys.Date() - 10, Sys.Date(), by = 1)
weekdays(x, abbr = TRUE)
# [1] "Wed" "Thu" "Fri" "Sat" "Sun" "Mon" "Tue" "Wed" "Thu" "Fri" "Sat"
x[grepl("S(at|un)", weekdays(x))]
# [1] "2014-10-11" "2014-10-12" "2014-10-18"

As far as lubridate goes, wday() has a label argument. When set to TRUE, the (abbreviated) day names are returned instead of numbers. Use the abbr argument to change to full names.

library(lubridate)
wday(x, label = TRUE)
# [1] Wed   Thurs Fri   Sat   Sun   Mon   Tues  Wed   Thurs Fri   Sat  
# Levels: Sun < Mon < Tues < Wed < Thurs < Fri < Sat