Пакеты chron и bizdays имеют дело с рабочими днями, но на самом деле ни один из них не содержит пригодного для использования календаря праздников, ограничивающего их полезность.
Ниже мы будем использовать chron, предполагая, что вы определили вектор .Holidays
дат выходных дней.(Если вы запустите приведенный ниже код, не делая этого, только рабочие дни будут считаться рабочими днями, поскольку вектор .Holidays
по умолчанию, предоставленный chron, содержит очень мало дат.) DF
имеет 120 строк (по одной строке для каждого года / месяца).) и подмножества последней строки равны месяцу каждого года с наименьшим количеством рабочих дней.
library(chron)
library(zoo)
st <- as.yearmon("2001-01")
en <- as.yearmon("2010-12")
ym <- seq(st, en, 1/12) # sequence of year/months of interest
# no of business days in each yearmonth
busdays <- sapply(ym, function(x) {
s <- seq(as.Date(x), as.Date(x, frac = 1), "day")
sum(!is.weekend(s) & !is.holiday(s))
})
# data frame with one row per year/month
yr <- as.integer(ym)
DF <- data.frame(year = yr, month = cycle(ym), yearmon = ym, busdays)
# data frame with one row per year
wx.min <- ave(busdays, yr, FUN = function(x) which.min(x) == seq_along(x))
DF[wx.min == 1, ]
, что дает:
year month yearmon busdays
2 2001 2 Feb 2001 20
14 2002 2 Feb 2002 20
26 2003 2 Feb 2003 20
38 2004 2 Feb 2004 20
50 2005 2 Feb 2005 20
62 2006 2 Feb 2006 20
74 2007 2 Feb 2007 20
95 2008 11 Nov 2008 20
98 2009 2 Feb 2009 20
110 2010 2 Feb 2010 20