2016-04-30 23 views
1

NYSEの休日とコロンブスの日と退役軍人の日を含む休日のリストを作成する必要があります。次のようにそのために私はtimeDateパッケージを使用:R timeDateパッケージ - 休日出力の問題

library(timeDate) 
years <- 2015 

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

を出力はまた、現在までに次の時間を追加し1969年に2つの日付が含まれています。タイムスタンプと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] 

私は別に結果TIMEDATEオブジェクトは、タイムスタンプを持っていない、と何年1969年がないholidayNYSE(2015)USColumbusDay(2015)またはUSVeteransDay(2015)を実行する場合は追加のタイムスタンプではとのすべての一緒に3つの結果を実行している理由を私は理解していません1969年問題。もちろん私は3つの独立したものを走らせることができ、それらを結びつけることができました。それは単なるパッチです。もし私がそれを避けることができれば、私はむしろそれをする必要はありません。ご協力ありがとうございました。

+0

は正しい日付を生産、まだタイムスタンプでいるようです。これはおそらくタイムゾーンの問題によるものです。 'holidayNYSE'はニューヨークを参照し、他の2つはGMTです。 – Gopala

+0

実際には、timeDateオブジェクトを見ると、正しい日付値を持つ属性Dataがあります。だから、 'c(holidayNYSE(x)、USColumbusDay(x)@Data、USVeteransDay(x)@Data)'にアクセスしてください。まだGMT。 – Gopala

+0

Gopalaありがとうございます。間違った日付(1969年問題)は修正されましたが、それでもタイムスタンプは取得されます。問題はあなたが提案したようにタイムゾーンです。 'timeDate'は異なるタイムゾーンに気づき、' USColumbusDay(2015) 'と' USVeteransDay(2015) 'の出力として "[2015-10-11 20:00:00] [2015-11-10 19:00:00] '(すなわち、GMT時間の前日に移動した)。だから、別々に実行してバインドしたり、それらを共同して実行したりして解決する方法はないと思います。これを答えにしたいですか? – Krug

答えて

1

これは、両方の問題解決:関数から `as.Dateを()`削除

library(timeDate) 
years <- 2015 

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