Помещая выходные в векторе:
holidays <- as.Date(c('2017-01-02', '2017-05-29', '2017-07-04', '2017-09-04', '2017-11-23', '2017-12-25'))
Извлекая месяц и день (чтобы сделать его независимым от года), "% j" обозначает день года:
holidays <- format(as.Date(holidays), "%j")
Генерация случайных данных для проверки (1000 равномерно распределенных записей о работе в 2017 году, 5 сотрудников):
d <- data.frame(
'date' = as.Date(as.integer(runif(1000, 17167, 17531)), origin = '1970-01-01'),
'emp' = sample(LETTERS[1:5], 1000, replace = T)
)
Фильтрация выходных:
h <- d[format(d$date, "%j") %in% holidays, ]
Подсчет количества отработанных отпусков на одного сотрудникаиспользование aggregate()
:
aggregate(h$date, list(h$emp), length)
# Group.1 x
#1 A 3
#2 B 4
#3 C 2
#4 D 5
#5 E 1
Примечание: будет работать в 2017 году, но не будет работать в течение високосных лет (один из обходных путей, который не требует слишком большого изменения кода, - это изменение года ввектор праздника вручную).