1

背景情報 (下部の質問を参照): 過去 10 年間、さまざまなタイム ゾーンの数百のサイトで毎時間、機器によって収集された 1 時間ごとの平均観測値のデータセットを受け取りました。計測器は夏時間に合わせて調整されることはないため、データセット内のすべての時間は現地の標準時間です。1 時間ごとに報告される値は、前の 1 時間に毎分行われた測定値の平均です。年、月、日、および時間が別々の列で報告されます。時間は 0:23 ではなく 1:24 から始まります。UTC 日時を含む新しい列を作成したいと考えています。

以下のデータ テーブルは、最新のソリューションを使用したサンプル データセットです。2 週間の多くのイライラする時間の間、私は strptime、chron、POXITcl、および POXITlt を試し、stackoverflow やその他のソースを精査して、解決策が何であるかを理解しようとしました。変換を試みているときに何が起こっているのかはわかりません (ほとんどの場合、それが間違っていると確信している場合を除きます!)。

私が作成した日時列が、私が使用すべき正しい中間ステップであるかどうか、またはそれからRが正しく処理するUTC時間に取得する方法かどうかはわかりません。日時列のデータと時刻の間に文字「T」を挿入して、列を強制的に文字のままにしました。そうしないと、予期しないことが起こります。たとえば、私のコンピュータのオペレーティング システムのタイムゾーンは America/Toronto で、

as.POSIXct(mydata$datetime, format="%Y-%m-%dT%H:%M %z")

2013-01-01T01:00-0800 を 2013-01-01 04:00:00 に変換します。上記のコマンドは、UTC ではなく、マシンのタイムゾーンに変換しているようです。したがって、コマンドを実行する前に、コンピューターのオペレーティング システムのタイム ゾーンを変更せずに、R 環境のタイム ゾーンを変更すると、

Sys.setenv(TZ = "GMT")
mydata$dateUTC <- as.POSIXct(mydata $datetime, format="%Y-%m-%dT%H:%M %z") 
Sys.unsetenv("TZ")

次に、上記のコマンドは2013-01-01T01:00-0800 を 2013-01-01 09:00:00 に変換します。これは、探している UTC 時間のようです。

hour24 についてはあまり心配していません。どの方法を使用しても、日付は自動的に翌日に繰り上げられ、時間は 00:00 に変更されるようです (たとえば、2013-01-01 24:00 は 2013-01 になります)。 -02 00:00)。

UTC から現地時間に変換するとき、標準時から夏時間に変わる日付が何年にもわたって変更されている可能性があるという事実について、私はあまり心配していません。正しい UTC 時間と Olson タイムゾーンが与えられた場合、IANA タイムゾーン データベースを使用すると、これは自動的に処理されるはずです (私はそう思います)。

質問 1: R を使用して、1 年を通して現地標準時で報告されている年月日時間を UTC 時間に変換するにはどうすればよいですか?

質問 2: R を使用して、UTC 時間からローカル標準時間に変換するにはどうすればよいですか (常用時に DST を使用する地域では DST に変換せずに)?

質問 3: R を使用して、夏時間を考慮して UTC 時刻から現地時刻に変換するにはどうすればよいですか?

質問 4: UTC から現地時間に変換するには、IANA データベースのタイムゾーン名が必要です。各サイトの緯度と経度を考慮して、Web 上のどこかからこれを取り込む方法はありますか?

filename = mydata
    site    year  month day hourend UTCoffset      datetime         obs
    2001    2015    1   1   22:00   -0200   2013-01-01T22:00-0200   1356
    2001    2015    1   1   23:00   -0200   2013-01-01T23:00-0300   1593
    2001    2015    1   1   24:00   -0200   2013-01-01T24:00-0200   946
    2001    2015    1   2   01:00   -0200   2013-01-02T01:00-0200   271
    2001    2015    1   2   02:00   -0200   2013-01-02T02:00-0200   665
    3001    2015    1   1   22:00   -0350   2013-01-01T22:00-0350   548
    3001    2015    1   1   23:00   -0350   2013-01-01T23:00-0350   936
    3001    2015    1   1   24:00   -0350   2013-01-01T24:00-0350   1938
    3001    2015    1   2   01:00   -0350   2013-01-02T01:00-0350   952
    3001    2015    1   2   02:00   -0350   2013-01-02T02:00-0350   1584
    4001    2015    1   1   22:00   -0400   2013-01-01T22:00-0400   1837
    4001    2015    1   1   23:00   -0400   2013-01-01T23:00-0400   1275
    4001    2015    1   1   24:00   -0400   2013-01-01T24:00-0400   382
    4001    2015    1   2   01:00   -0400   2013-01-02T01:00-0400   837
    4001    2015    1   2   02:00   -0400   2013-01-02T02:00-0400   592
    5001    2015    1   1   22:00   -0500   2013-01-01T22:00-0500   392
    5001    2015    1   1   23:00   -0500   2013-01-01T23:00-0500   15
    5001    2015    1   1   24:00   -0500   2013-01-01T24:00-0500   403
    5001    2015    1   2   01:00   -0500   2013-01-02T01:00-0500   993
    5001    2015    1   2   02:00   -0500   2013-01-02T02:00-0500   1287
    6001    2015    1   1   22:00   -0600   2013-01-01T22:00-0600   738
    6001    2015    1   1   23:00   -0600   2013-01-01T23:00-0600   992
    6001    2015    1   1   24:00   -0600   2013-01-01T24:00-0600   1392
    6001    2015    1   2   01:00   -0600   2013-01-02T01:00-0600   189
    6001    2015    1   2   02:00   -0600   2013-01-02T02:00-0600   1282
    7001    2015    1   1   22:00   -0700   2013-01-01T22:00-0700   839
    7001    2015    1   1   23:00   -0700   2013-01-01T23:00-0700   742
    7001    2015    1   1   24:00   -0700   2013-01-01T24:00-0700   942
    7001    2015    1   2   01:00   -0700   2013-01-02T01:00-0700   882
    7001    2015    1   2   02:00   -0700   2013-01-02T02:00-0700   993
    8001    2015    1   1   22:00   -0800   2013-01-01T22:00-0800   1140
    8001    2015    1   1   23:00   -0800   2013-01-01T23:00-0800   1532
    8001    2015    1   1   24:00   -0800   2013-01-01T24:00-0800   1834
    8001    2015    1   2   01:00   -0800   2013-01-02T01:00-0800   1732
    8001    2015    1   2   02:00   -0800   2013-01-02T02:00-0800   954
4

1 に答える 1