文字列から解析するときにタイムゾーンを設定する際、@ alistaireの助言に従います。
attr(inputData$timestamp, "tzone")
が""
その後で、""
は、あなたの地域のタイムゾーンにデータを設定するためのデフォルトであるため、実際には、これが起こっているように見えます。
問題は、クラスPOSIXct
入力してas.Date
を使用して、tz
のデフォルトは"UTC"
ではなく、ローカルタイムゾーンであるということです。
- があなたの
split
に使用as.Date(inputData$timestamp, tz="")
"UTC"
- にない変更データのタイムゾーンを実行してください:あなたが欲しいものを手に入れます。
のデータがあるとしましょう、説明するために:
inputData<- structure(list(timestamp = structure(c(1473048000, 1473051600,
1473055200, 1473058800, 1473062400, 1473066000, 1473069600, 1473073200,
1473076800, 1473080400, 1473084000, 1473087600, 1473091200, 1473094800,
1473098400, 1473102000, 1473105600, 1473109200, 1473112800, 1473116400,
1473120000, 1473123600, 1473127200, 1473130800, 1473134400, 1473134460,
1473134520, 1473134580), class = c("POSIXct", "POSIXt"), tzone = ""),
value = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
0L)), .Names = c("timestamp", "value"), row.names = c(NA,
-28L), class = "data.frame")
## timestamp value
##1 2016-09-05 00:00:00 0
##2 2016-09-05 01:00:00 0
##3 2016-09-05 02:00:00 0
##4 2016-09-05 03:00:00 0
##5 2016-09-05 04:00:00 0
##6 2016-09-05 05:00:00 0
##7 2016-09-05 06:00:00 0
##8 2016-09-05 07:00:00 0
##9 2016-09-05 08:00:00 0
##10 2016-09-05 09:00:00 0
##11 2016-09-05 10:00:00 0
##12 2016-09-05 11:00:00 0
##13 2016-09-05 12:00:00 0
##14 2016-09-05 13:00:00 0
##15 2016-09-05 14:00:00 0
##16 2016-09-05 15:00:00 0
##17 2016-09-05 16:00:00 0
##18 2016-09-05 17:00:00 0
##19 2016-09-05 18:00:00 0
##20 2016-09-05 19:00:00 0
##21 2016-09-05 20:00:00 0
##22 2016-09-05 21:00:00 0
##23 2016-09-05 22:00:00 0
##24 2016-09-05 23:00:00 0
##25 2016-09-06 00:00:00 0
##26 2016-09-06 00:01:00 0
##27 2016-09-06 00:02:00 0
##28 2016-09-06 00:03:00 0
で:
デフォルト
tz
パラメータで
as.Date
を使用して
split
を行う
attr(inputData$timestamp, "tzone")
##[1] ""
:
byDay <- split(inputData, as.Date(inputData$timestamp))
byDay[[1]]
## timestamp value
##1 2016-09-05 00:00:00 0
##2 2016-09-05 01:00:00 0
##3 2016-09-05 02:00:00 0
##4 2016-09-05 03:00:00 0
## ...
##17 2016-09-05 16:00:00 0
##18 2016-09-05 17:00:00 0
##19 2016-09-05 18:00:00 0
##20 2016-09-05 19:00:00 0
byDay[[2]]
## timestamp value
##21 2016-09-05 20:00:00 0
##22 2016-09-05 21:00:00 0
##23 2016-09-05 22:00:00 0
##24 2016-09-05 23:00:00 0
##25 2016-09-06 00:00:00 0
##26 2016-09-06 00:01:00 0
##27 2016-09-06 00:02:00 0
##28 2016-09-06 00:03:00 0
ありませんw、私は米国の東海岸にいるので、今はEDTにいる。このため、22:00:00
は、UTCの翌日までsplit
になります。行うのと同じsplit
as.Date(inputData$timestamp,tz="")
を持つ:
byDay <- split(inputData, as.Date(inputData$timestamp,tz=""))
byDay[[1]]
## timestamp value
##1 2016-09-05 00:00:00 0
##2 2016-09-05 01:00:00 0
##3 2016-09-05 02:00:00 0
##4 2016-09-05 03:00:00 0
## ...
##21 2016-09-05 20:00:00 0
##22 2016-09-05 21:00:00 0
##23 2016-09-05 22:00:00 0
##24 2016-09-05 23:00:00 0
byDay[[2]]
## timestamp value
##25 2016-09-06 00:00:00 0
##26 2016-09-06 00:01:00 0
##27 2016-09-06 00:02:00 0
##28 2016-09-06 00:03:00 0
これはあなたがいないという事実の後、POSIXctに文字列から解析しているとき、あなたが本当に取り組むべき何かがある、またはそれはあなたがタイムゾーンを変更しているかどうかを非常にあいまいな取得します(つまり、時間を調整する)、または単に切り替える(つまりデータを変更する)ことができます。代わりに、 'as.POSIXct'に' tz'を指定するか、使用している構文解析関数を指定してください。 – alistaire
SOについての質問方法については、[mcve]を参照してください。あなたの入力(またはそれの縮小版)がXの場合、 'dput(X)'の出力を表示します。 –
@alistaire as.POSIXct'の 'tz =" "はそれを解決しました。また、後でなく、パース時にタイムゾーンを正しく取得するための一貫したアプローチ。ありがとう。 –