1

次のようなcsvファイルに日時のペアがあります

2012 年 11 月 4 日

1 つの列で

12:06:08 午前

隣の列に。これらはローカル時間で記録されます (つまり、適切な時間に PST と PDT に切り替わります) が、ファイルには tz または DST インジケータがありません。それを検出する唯一の目に見える方法は、時間のシーケンスが面白いことをすることです。たとえば、2012 年 11 月 4 日に、次のような一連の時間があります。

12:51:20 AM 1:13:08 AM 1:24:58 AM 1:40:28 AM 1:48:08 AM 1:54:08 AM 1:56:58 AM 1:04:28 AM 1:午前 05:48 午前 1:07:18 午前 1:15:00 午前 1:39:08 午前 2:05:38

PST はおそらく午前 1:04:28 の読み取り値から始まりますが、指標はありません。

タイムゾーンを適切に割り当てる簡単な方法はありますか (おそらく lubridate を使用)? ファイルは長いので、一度に 1 つずつ読み取りをループするのは避けたいと思います。時間がかかるのではないかと心配しています。スプリングは逆に同じことをする必要があります。

4

1 に答える 1

1

これは不可能です。"11/4/2012 1:04:28 AM"それが PST であり、実際に"11/4/2012 12:51:20 AM""11/4/2012 1:13:08 AM"PDTの間の観察ではないことを確実に知る方法はありません。

観測がファイル内で順序付けられていることが確実な場合は、それらを に変換してベクトルのPOSIXtを取得できます。diff負の値はすべて DST の変更になります。ただし、DST 変更後の観測間の時間が 1 時間を超える場合は、一部を見逃す可能性があります。

Lines <- "11/4/2012 12:51:20 AM
11/4/2012 01:13:08 AM
11/4/2012 01:24:58 AM
11/4/2012 01:40:28 AM
11/4/2012 01:48:08 AM
11/4/2012 01:54:08 AM
11/4/2012 01:56:58 AM
11/4/2012 01:04:28 AM
11/4/2012 01:05:48 AM
11/4/2012 01:07:18 AM
11/4/2012 01:15:00 AM
11/4/2012 01:39:08 AM
11/4/2012 02:05:38 AM"

x <- scan(con <- textConnection(Lines), what="", sep="\n")
close(con)
diff(strptime(x, format="%m/%d/%Y %I:%M:%S %p"))
# Time differences in mins
#  [1]  21.800000  11.833333  15.500000   7.666667   6.000000   2.833333
#  [7] -52.500000   1.333333   1.500000   7.700000  24.133333  86.500000
于 2013-02-22T12:59:29.683 に答える