2016-05-05 10 views
5

私は東部標準時(EST)に設定された日付と時刻を持つ水質連続監視プローブから一連のデータセットを取得しています夏時間(EDT)の補正。 Rでは、MSアクセスデータベースからデータテーブルをインポートするときにフィールドが要因として認識されますが、as.POSIXct()の日付と時刻を使用して2016-03-13の02:00(24クロック)からNAsに変換されます。これは、ESTからEDTへの移行によるものです。したがって、技術的には2016-03-13 02:00は存在しません。 東部標準時(EST)と東部夏時間(EDT)を扱うR

は、いくつかは例

test<-data.frame(Date=rep(as.Date("2016-03-13"),120),Hour=rep(seq(0,23,1),5),Min=rep(seq(0,60,15),24))

ESTタイムゾーンの指定を保持したままPOSIXctフィールドと因子または文字フィールドを変換する方法はありますように、データを作成しましたか?あるいは、適切な日付と時刻を識別してESTとEDTに変換する方法はありますか?

私は周りを回ってしまい、何もできません。 GMT(またはUTC)に変換してEST(tz = "America/New_York")に変換してみました。これは現在進行中の問題であり、特にRで日付と時刻のデータを扱う人はEDTから離れたいと思っています。

何か助けていただければ幸いです...私はこの1つの私の知恵の終わりです。

+0

私は回避策を見つけた可能性がありますが、私は100%確実ではありません。 tz = "Etc/GMT-5"を使用して、因子や文字からPOSIXctフィールドにdatetimeを変換すると、うまくいくように見えますが、まだわかりません。任意の方向または助言は歓迎されます。以下のコード例。 'test <-data.frame(Date = rep(as).Date(" 2016-03-13 ")、96)、Hour = rep(seq(0,23,1)、each = 4)、Minテストの$ Date、test $ Hour、test $ Min)、format = "%Y-%m-%d%H%%(% –

答えて

3

POSIX tz = "America/New_York"を使用する際の問題は、基になるタイムスタンプが米国東部標準時(UTC-5)に格納されていても夏時間が考慮されることです(UTC-4またはUTC-5)。

あなたはEtc/GMT+5とあなたのtzを指定できるはずです。そこから、EST、東部現地時間、GMT間の変換が簡単です。 Rでは、UTCの西側のタイムゾーンは正のオフセットで示されています(タイムゾーン名のドキュメント?timezoneを参照)。ここで

は(夏時間が3/16/16で午前2:00東部時間で効果を取った)いくつかの例のデータである:

StartTime=as.numeric(as.POSIXct("2016-03-11 0:00:00",format="%Y-%m-%d %H:%M",origin="1970-01-01",tz="Etc/GMT+5")) 
EndTime=as.numeric(as.POSIXct("2016-03-15 0:00:00",format="%Y-%m-%d %H:%M",origin="1970-01-01",tz="Etc/GMT+5")) 

Interval=15*60 #15-min 
data.EST=as.POSIXct(seq(from = StartTime,to = EndTime, by=Interval),origin="1970-01-01",tz="Etc/GMT+5") #generate date stamps 

# convert Eastern Standard Time (in R: GMT+5) to local time (accounts for daylight savings): 
data.EastCoast<- format(data.EST, tz="America/New_York") 

# convert Eastern Standard Time (in R: GMT+5) to UTC/GMT: 
data.UTC<- format(data.EST, tz="GMT") 

compare.times<-data.frame(data.EST,data.EastCoast,data.UTC) 

compare.times[(198:203),] 

       data.EST  data.EastCoast   data.UTC 
198 2016-03-13 01:15:00 2016-03-13 01:15:00 2016-03-13 06:15:00 
199 2016-03-13 01:30:00 2016-03-13 01:30:00 2016-03-13 06:30:00 
200 2016-03-13 01:45:00 2016-03-13 01:45:00 2016-03-13 06:45:00 
201 2016-03-13 02:00:00 2016-03-13 03:00:00 2016-03-13 07:00:00 
202 2016-03-13 02:15:00 2016-03-13 03:15:00 2016-03-13 07:15:00 
203 2016-03-13 02:30:00 2016-03-13 03:30:00 2016-03-13 07:30:00 

幸運!

1

POSIXへの変換中に、タイムゾーンを指定する必要があります。この例を参照してください。

test<-data.frame(Date=rep(as.Date("2016-03-13"),96),Hour=rep(seq(0,23,1), each=4),Min=rep(seq(0,45,15))) 
wrong<-as.POSIXct(paste(test$Date, test$Hour, test$Min), format="%Y-%m-%d %H %M") 
ans<-as.POSIXct(paste(test$Date, test$Hour, test$Min), format="%Y-%m-%d %H %M", tz="EST") 

compare<-cbind(test, wrong, ans) 

ベクターにおいて、「間違った」、何のタイムゾーンは、このようにNAを指定しなかったが、第二の場合には東部標準時を指定し、所望の結果が与えられます。

+0

返信ありがとうございます。私は、Rの "EST"が北米/カナダの "東部標準時"を指していることを示すためにいくつかの矛盾する文書を読んでいます。東部標準時"。これは、「オーストラリア東部標準時」がUTC-10で、「東部標準時」がUTC-5であるため、大きな違いになります。私は時々タイムゾーン表記に関して混乱しているだけです。そこには多くの情報があります。任意の点をいただければ幸いです。 –

+0

可能なタイムゾーンのリストについては、?timezonesおよびOlsonNames()を参照してください。私は東海岸にあり、Sysを走っています。時間が返ってきた - "EDT" – Dave2e

+0

ありがとう、私はまた、米国の東海岸で実行していて、Sys.time()してEDTを得ました。入力広告のガイダンスをありがとう。 –

関連する問題