[R]行政機関の営業日数を求める
行政機関の休日は、土日祝日と12/31~1/3。これを指定の年度の日付型ベクトルから取り除けばよい。以下は2024年度(2024-04-01/2025-03-31)の行政機関の営業日数を調べた例。土日と年末年始はweekdays関数を使えば機械的に取り除ける。祝日の判定には、内閣府のウェブサイトで公開されている祝日をCSV形式で納めたファイルを利用している。2024年11月現在、昭和30年(1955年)~令和7年(2025年)の祝日が納められている。
> # 下準備
> library(tidyverse)
> options(readr.show_progress = FALSE, readr.show_col_types = FALSE)
> loc <- locale(encoding = "Shift_JIS")
> s <- "https://www8.cao.go.jp/chosei/shukujitsu/syukujitsu.csv"
> hday <- read_csv(s, locale = loc)
> colnames(hday) <- c("date", "name")
> hday$date <- as.Date(hday$date)
> # 営業日数を計算する年度を西暦で指定
> nendo <- 2024
> # 営業日数の計算開始
> dt1 <- as.Date(ISOdate(nendo, 4, 1))
> dt2 <- as.Date(ISOdate(nendo + 1, 3, 31))
> # まずは年度のすべてを日(365or366日)を作成
> bday <- tibble(date = seq(dt1, dt2, by = "day"))
> # 当該年度のすべての日に曜日情報を追加
> bday <- bday |> mutate(wday = weekdays(date, abbreviate = TRUE))
> # すべての日から土日を取り除く
> bday <- bday |> filter(!str_detect(wday, "土|日"))
> # (すべての日)-(土日)-(祝日)
> bday <- bday |> anti_join(hday, by = join_by(date == date))
> # 最後に年末年始の6日間を取り除く(土日祝日削除で既に無い可能性有り)
> dth1 <- as.Date(ISOdate(nendo, 12, 29))
> dth2 <- as.Date(ISOdate(nendo + 1, 1, 3))
> bday <- bday |> filter(date < dth1 | date > dth2)
> # 結果を出力
> cat(sprintf("%d年度の営業日数は %d 日\n", nendo, nrow(bday)))
2024年度の営業日数は 243 日