Вариант Base R.Сначала создайте список всех дней, затем match
с помощью weekdays
и вычтите его из 6 (как мы хотим субботу), чтобы узнать, сколько дней нам нужно добавить в исходный столбец date
.
all_days <- c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
#As @nicola mentioned this is locale dependent
#If your locale is not English you need weekdays in your current locale
#which you can manually write as shown above or do any one of the following
#all_days <- weekdays(seq(as.Date("2019-01-14"),by="day",length.out=7))
#OR
#all_days <- format(seq(as.Date("2019-01-14"),by="day",length.out=7), "%A")
df$EOW <- df$date + 6 - match(weekdays(df$date), all_days)
df
# date week EOW
#1 2014-08-20 34 2014-08-23
#2 2014-08-25 34 2014-08-30
#3 2014-10-08 41 2014-10-11
Или lubridate
имеет функцию ceiling_date
, которая при использовании с unit = "week"
вернет вам следующее «воскресенье», поэтому мы вычитаем из него 1 день, чтобы получить «Субботу».
library(lubridate)
df$EOW <- ceiling_date(df$date, unit = "week") - 1