2016-04-30 3 views
1

Мне нужно составить список праздников, который включает в себя каникулы NYSE плюс День Колумба и День ветеранов. Для этого я использовал timeDate пакет следующим образом:R timeDate package - выходной выпуск выпуск

library(timeDate) 
years <- 2015 

holidayEIA <- function(x){ c(holidayNYSE(x), 
          as.Date(USColumbusDay(x)), 
          as.Date(USVeteransDay(x))) } 
holidayEIA(years) 

Выход состоит из двух дат в 1969. Он также добавляет время рядом с датой. Я мог бы удалить метку времени и элементы, содержащие 1969, с линией кода. Тем не менее, предпочли бы, чтобы они не присутствовали с самого начала.

#Output 
[1] [2015-01-01 00:00:00] [2015-01-19 00:00:00] [2015-02-16 00:00:00] 
[4] [2015-04-03 00:00:00] [2015-05-25 00:00:00] [2015-07-03 00:00:00] 
[7] [2015-09-07 00:00:00] [2015-11-26 00:00:00] [2015-12-25 00:00:00] 
[10] [1969-12-31 23:38:40] [1969-12-31 23:39:10] 

Если я бег holidayNYSE(2015), USColumbusDay(2015) или USVeteransDay(2015) отдельно результирующие объекты timeDate не имеет метки времени, и нет 1969 года я не понимаю, почему работают все три вместе результаты в штампе времени добавляется и в 1969 год. Конечно, я мог бы также запустить три самостоятельно, и они свяжут их. Это всего лишь патч; Я бы предпочел не делать этого, если смогу этого избежать. Спасибо за помощь.

+0

Удаление 'as.Date()' от функции, кажется, производит правильные даты, но все же с отметкой времени. Возможно, это связано с проблемами часового пояса. «holidayNYSE» ссылается на Нью-Йорк, тогда как другие два - GMT. – Gopala

+0

Фактически, если вы посмотрите на объект timeDate, он имеет атрибут Data, который имеет правильное значение даты. Таким образом, получите доступ к нему как 'c (holidayNYSE (x), USColumbusDay (x) @Data, USVeteransDay (x) @Data)'. По-прежнему GMT. – Gopala

+0

Спасибо, Гопала. Это скорректировало неправильные даты (выпуск 1969 года), но все же получил отметку времени. Проблема заключается в часовом поясе, как вы предложили. 'TimeDate' отмечает разные Timezones и предоставляет« [2015-10-11 20:00:00] [2015-11-10 19:00:00] »в качестве вывода для' USColumbusDay (2015) 'и' USVeteransDay (2015) '(т.е. переместился на день до GMT). Так что догадайтесь, что нет решения, кроме как запускать их отдельно и связывать их, или запускать их совместно, и устранять это время. Хотите сказать это как ответ? – Krug

ответ

1

Это решило обе проблемы:

library(timeDate) 
years <- 2015 

holidayEIA <- function(x){ c(holidayNYSE(x), 
          USColumbusDay(x)@Data+ 14400, 
          USVeteransDay(x)@Data+ 18000)} 
holidayEIA(years)