我在csv文件中有日期时间对,看起来像
2012年11月4日
在一栏中
12:06:08 AM
在邻近的专栏中。它们以当地时间记录(即,它们在适当的时间切换到PST和PDT),但文件中没有tz或DST指示符。唯一可见的检测方式是,时间序列确实有趣。例如,在2012年11月4日,我有一系列时间,如
12:51:20 AM 上午1:13:08 凌晨1:24:58 凌晨1:40:28 上午1:48:08 凌晨1:54:08 凌晨1:56:58 上午1:04:28 凌晨1点05分48分 凌晨1:07:18 凌晨1点15分 凌晨1:39:08 凌晨2:05:38
PST可能从上午1:04:28读数开始,但没有指标。
是否有一种直接的方法来正确分配时区(大概是使用润滑剂)?文件很长,所以我宁愿不要一次读取一个读数,因为我担心这可能需要一些时间。我将不得不为春天做相同的事情。
答案 0 :(得分: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