2

2つの日付の間のすべての火曜日を検索したいと思います。しかし、火曜日がユーザー定義の休日のリストに該当する場合は、代わりに水曜日を希望します。

このコードは私のテストでは機能しますが、かなりぎこちなく、静かに失敗するのではないかと心配しています。

low.date <- "1996-01-01"
high.date <- "1997-01-01"
holidays = c("01-01", "07-04", "12-25")
tues <- seq(as.Date(low.date), as.Date(high.date), by = 1) 
tues <- subset(tues, format(tues, "%a") == "Tue")
tues <- ifelse(format(tues, "%m-%d") %in% holidays, tues + 1, tues)
tues <- as.Date(tues, origin = "1970-01-01")

ありがとう!パッケージを指す回答が表示されtimeDateますが、営業日または休日を検索する方法しか表示されません。私が使用しているものよりもクリーンで安全なロジックはありますか?

4

2 に答える 2

4

ソリューションのロジックを変更することは困難です。ただし、これはパッケージとは異なるwday関数を使用した形式です。lubridate

hol_tue <-  wday(tues) == 3L & format(tues, "%m-%d") %in% holidays
wday(tues)[hol_tue] <- 4

少し不便なことに、潤滑剤パッケージの日数は日曜日から始まり、日曜日が0であるPOSIXltとは対照的に、日曜日が1日目です。

于 2011-01-22T23:24:16.463 に答える
2

基本パッケージのPOSIXltを使用するwdayと、番号としてアクセスできます。これは、システムごとに日の名前が変わるため、少し安全です。

low.date <- "1996-01-01"
high.date <- "1997-01-01"
holidays <- c("01-01", "07-04", "12-25")

all.days <- seq(as.Date(low.date), as.Date(high.date), by = "day")

# Tuesday is Day 2 of the week
all.tues <- all.days[as.POSIXlt(all.days)$wday == 2]
tues.holidays <- format(all.tues, "%m-%d") %in% holidays
all.tues[tues.holidays] <- all.tues[tues.holidays] + 1
于 2011-01-22T22:33:06.740 に答える