我在使用R:
生成适当的时间序列时遇到问题fivemin <- seq(as.POSIXct("2014/01/01 0:00:00"), as.POSIXct("2014/04/01 0:00:00"), by="5 mins",tz="EST")
time <- data.frame(MasterTime=fivemin)
使用上面的代码,我可以得到一个包含25909个观测值的数据框。但是,在东部标准时间(没有夏令时)下,观测数量应为25920.与2014年9月3日的夏令时转换相差1小时,因为时间将从凌晨1点变为3 AM直接。我不确定R如何处理这种时间变化。我如何修改我的代码,以便R生成一个时间序列,而不会在2014年9月3日错过凌晨2点?有没有人对此有任何想法?
非常感谢!
答案 0 :(得分:2)
如果您不想使用夏令时,请尝试设置tz ='UTC'
fivemin <- seq(as.POSIXct("2014/01/01 0:00:00", tz = 'UTC'), as.POSIXct("2014/04/01 0:00:00", tz = 'UTC'), by="5 mins")
head(fivemin)
length(fivemin)
#[1] 25921
除了'UTC'或'GMT'之外,最好不要在时区使用三字母标记,例如“EST”,因为这些是不明确的。澳大利亚有东部标准时间,美国也是如此。而是使用国家/城市
fivemin <- seq(as.POSIXct("2014-04-06 2:00:00", tz="Australia/Melbourne"), as.POSIXct("2014-04-06 3:00:00", tz="Australia/Melbourne"), by="5 mins")
length(fivemin)
# [1] 25
# Melbourne's DST finished on 6 April 2014 at 3 am so there are 25 x 5 min periods in the hour between 2am and 3 am
fivemin <- seq(as.POSIXct("2014-04-06 2:00:00", tz="Australia/Brisbane"), as.POSIXct("2014-04-06 3:00:00", tz="Australia/Brisbane"), by="5 mins")
length(fivemin)
# [1] 13 Brisbane doesn't use DST so no problem
同时检查lubridate包中的dst功能。
如果您想保留时区,但是请使用标准时间,请尝试使用。
library(lubridate)
fivemin <- seq(as.POSIXct("2014-04-06 2:00:00", tz="Australia/Melbourne"), as.POSIXct("2014-04-06 3:00:00", tz="Australia/Melbourne"), by="5 mins")
fivemin[dst(fivemin)] <- fivemin[dst(fivemin)]-3600