2016-12-04 5 views
0

私は、2011年1月1日から2016年8月31日までのタイムスタンピングされたレコードが何百万もあるデータセットを扱っています。これらは文字として読み、私はので、それらを転換した。ルブリド夏時間が表示されます。NA

dt$dropoffDT<-strptime(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S") 

は、彼らはすべて2と午前3時間の2016年3月13日からのレコードを除いて正しく変換しました。夏時間は午前2時にマッハ13で始まりました。

これらのレコードはdatetimesとして印刷されますが、NAとして記録されているように見えます。これにより、フィールドをさらに操作することができなくなります。ここでは、これらのレコードを分離したデータセットの要点と概要を示します。

head(dropDT) 
       dropoffDT 
15403 2016-03-13 02:09:45 
25304 2016-03-13 02:15:52 
314784 2016-03-13 02:01:00 
429343 2016-03-13 02:05:25 
475529 2016-03-13 02:08:00 
503665 2016-03-13 02:00:10 

summary(dropDT) 
    dropoffDT 
Min. :NA 
1st Qu.:NA 
Median :NA 
Mean :NA 
3rd Qu.:NA 
Max. :NA 
NA's :192 

あなたの考えは高く評価されます。ありがとうございました!

答えて

0

変換ルーチンには、非DSTベースでエンコードされたdatetimesのメソッドがあります。すべての回 "UCT"(または "GMT")を使用して考えてみましょう:

as.POSIXct(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="UCT") 

MCVE:

dt <- # made with dput(dt) 
structure(list(dropoffDT = structure(c(1L, 5L, 2L, 3L, 4L, 6L 
), .Label = c("2016-03-12 02:09:45", "2016-03-13 02:01:00", "2016-03-13 02:05:25", 
"2016-03-13 02:08:00", "2016-03-13 02:15:52", "2016-03-14 02:00:10" 
), class = "factor")), .Names = "dropoffDT", class = "data.frame", row.names = c(NA, 
-6L)) 

as.POSIXct(dt$dropoffDT, format="%Y-%m-%d %H:%M:%S", usetz=TRUE, tz="GMT") 

[1] "2016-03-12 02:09:45 GMT" "2016-03-13 02:15:52 GMT" 
[3] "2016-03-13 02:01:00 GMT" "2016-03-13 02:05:25 GMT" 
[5] "2016-03-13 02:08:00 GMT" "2016-03-14 02:00:10 GMT" 

私は後でlubridate側面を見ました。私はそのパッケージのユーザーではありません。 tzの文字を使って関数をスキャンすると、それらの関数はすでに引数を 'datetime'形式で持つ必要があると私は思っていました。

Rのタイムゾーンパラメータが非常に混乱しています(私は唯一のものではありません:Confused by DateTime offsets)。その質問者は、オフセット付きの非DSTゾーンを指定する正しいフォーマットを持っていました。米国太平洋スタンダードゾーンamはtz="Etc/GMT+8"であり、私たちの時間にはロンドンの時よりも8時間もかかる時間があるにもかかわらず、プラス記号が使用されていることに注意してください。

私は、一般的にテストを行う必要があり、これらの側面に取り組んでいます:

strftime(Sys.time(), usetz=TRUE, tz="Etc/GMT-7") 
#[1] "2016-12-04 23:53:42 GMT-7" 
# No, it's not midnight here 
strftime(Sys.time(), usetz=TRUE, tz="Etc/GMT+7") 
#[1] "2016-12-04 09:53:52 GMT+7" 

# it's not 9:53A either 
strftime(Sys.time(), usetz=TRUE) 
#[1] "2016-12-04 08:54:13 PST" 
strftime(Sys.time(), usetz=TRUE, tz="Etc/GMT+8") 
#[1] "2016-12-04 08:54:26 GMT+8"