我想使用R进行时间序列分析。我想建立一个时间序列模型,并使用timeDate和Forecast包中的函数。
我在CET时区有盘中数据(15分钟数据,每小时4个数据点)。在3月31日实行夏令时,我通常缺少96个数据点中的4个数据点。在10月28日,我将有4个数据点,因为时间切换回来了。
对于我的时间序列模型,我始终需要96个数据点,否则盘中的季节性会变得混乱。
您对此有任何经验吗?您是否知道可以自动执行此类数据处理的R函数或程序包-不错的选择?
谢谢!
最佳答案
我对来自传感器的水文数据也有类似的问题。我的时间戳记为UTC + 1(CET),没有切换为夏令时(UTC + 2,CEST)。因为我不希望数据减少一小时(如果使用UTC,情况会如此),所以我选择了%z
的strptime
转换规范。在?strptime
中,您将找到:
%z
与UTC的小时数和分钟数的符号偏移量,因此-0800是8小时
落后于UTC。
例如:在2012年,从标准时间切换到夏令时发生在2012-03-25,因此这一天没有02:00。如果您尝试将“ 2012-03-25 02:00:00”转换为POSIXct对象,
> as.POSIXct("2012-03-25 02:00:00", tz="Europe/Vienna")
[1] "2012-03-25 CET"
您不会收到任何错误或警告,您只会得到没有时间的日期(此行为已记录在案)。
使用
format = "%z"
可以得到所需的结果:> as.POSIXct("2012-03-25 02:00:00 +0100", format="%F %T %z", tz="Europe/Vienna")
[1] "2012-03-25 03:00:00 CEST"
为了方便导入,我编写了一个带有适当默认值的小函数:
as.POSIXct.no.dst <- function (x, tz = "", format="%Y-%m-%d %H:%M", offset="+0100", ...)
{
x <- paste(x, offset)
format <- paste(format, "%z")
as.POSIXct(x, tz, format=format, ...)
}
> as.POSIXct.no.dst(c("2012-03-25 00:00", "2012-03-25 01:00", "2012-03-25 02:00", "2012-03-25 03:00"))
[1] "2012-03-25 00:00:00 CET" "2012-03-25 01:00:00 CET" "2012-03-25 03:00:00 CEST"
[4] "2012-03-25 04:00:00 CEST"
关于r - 当我们切换到夏令时并返回时处理日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13865172/