Проверить, является ли дата праздником в r

У меня есть набор данных, который выглядит так:

9/1/2014 00:00:25  
9/1/2014 00:00:28  
9/1/2014 00:00:40  

Есть еще много наблюдений...

Я хочу создать столбец, который указывает, является ли дата праздником или нет, поэтому я использовал функцию is.holiday(). Это мой код:

final_uber_4$is_holiday <- is.holiday(final_uber_4$interv) 

Проблема в том, что он возвращает 0 для всех наблюдений, хотя я точно знаю, что в моем наборе данных есть праздники.


person Eliza R    schedule 02.02.2019    source источник
comment
Если вы хотите повысить свои шансы на получение быстрого ответа и избежать отрицательных голосов по вашему вопросу, я бы рекомендовал следовать рекомендациям по размещению вопросов StackOverflow, которые включают использование правильной пунктуации, удаление приветствий (например, «привет» и «спасибо за помощь»). :)') и используя правильное форматирование (например, по датам). Я рекомендую прочитать Как мне задать хороший вопрос?   -  person angussidney    schedule 02.02.2019


Ответы (1)


Я предполагаю, что вы используете функцию is.holiday из пакета chron. Я бы рекомендовал не использовать этот пакет; функции даты в R улучшились с тех пор, как они были написаны, и в них нет необходимости.

Если вы хотите использовать is.holiday, вам нужно предоставить список праздников в формате, ожидаемом chron. Это непросто; см. этот вопрос Как определить праздники для пакета хронов is.holiday() в R с 2016 года для обсуждения.

Но если вы предоставляете список праздников, вам не нужно is.holiday. Просто используйте %in%. Например,

holidays <- as.Date(c(NewYears = "2014-01-01", Christmas = "2014-12-25"))
# Add more to the list above...

# Convert your data plus a holiday to POSIXct format:
interv <- as.POSIXct(c("9/1/2014 00:00:25", 
                       "9/1/2014 00:00:28",
                       "9/1/2014 00:00:40",
                       "1/1/2014 00:00:00"), format = "%m/%d/%Y %H:%M:%S")

# Extract the date:
dates <- as.Date(interv)

# Test if you've got a holiday:
dates %in% holidays

Это дает мне

[1] FALSE FALSE FALSE  TRUE

в конце.

person user2554330    schedule 02.02.2019