Рассчитать дату американского праздника с учетом указанных c год в R - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь выяснить, как рассчитать дату этих американских праздников:

  1. День Мартина Лютера Кинга-младшего (каждый третий понедельник января)
  2. День поминовения ( каждый последний понедельник мая)
  3. День благодарения (каждый четвертый ноябрь)

Можно ли придумать функцию (и) для вычисления даты с данным годом и как?

Заранее большое спасибо.

РЕДАКТИРОВАТЬ Ответ Руи Баррадаса работает хорошо, но я нашел еще один пакет под названием dateTime, он еще более прост и понятен. Я включу функцию, которую я придумал (имейте в виду, что я даю этой функции последовательность лет и в итоге получу векторы праздников).

years = seq(2020,2050)
library(timeDate)
MLKDays = vector()
memorialDays = vector()
thanksginingDays = vector()
nonFixedHolidays= function(y)
{
  for(yr in y)
  {
    MLKDays <<- c(MLKDays,toString(USMLKingsBirthday(yr)))
    memorialDays <<- c(memorialDays,toString(USMemorialDay(yr)))
    thanksginingDays <<- c(memorialDays,toString(USThanksgivingDay(yr)))
  }
}
nonFixedHolidays(years)

1 Ответ

1 голос
/ 23 апреля 2020

Пакет tis включает функции в федеральные праздники США.
Вывод функции holidays - это числа, представляющие YYYYMMDD, которые должны быть дополнительно обработаны.

hld <- tis::holidays(2020)
holid <- as.Date(as.character(hld), format = "%Y%m%d")
names(holid) <- names(hld)

holid
#    NewYears       MLKing   GWBirthday     Memorial        Labor 
#"2020-01-01" "2020-01-20" "2020-02-17" "2020-05-25" "2020-09-07" 
#    Columbus     Veterans Thanksgiving    Christmas 
#"2020-10-12" "2020-11-11" "2020-11-26" "2020-12-25" 

И сохранить только те, в вопросе, используйте grep.

i <- grep("MLK|Memorial|Thanks", names(hld), ignore.case = TRUE)
holid[i]
#      MLKing     Memorial Thanksgiving 
#"2020-01-20" "2020-05-25" "2020-11-26" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...