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)]
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