我想使用R进行时间序列分析。我想创建一个时间序列模型,并使用timeDate和forecast包中的函数。
我有CET时区的日内数据(15分钟数据,每小时4个数据点)。在3月31日实施夏令时,我丢失了我通常拥有的96个数据点中的4个。10月28日,我有4个数据点太多了,因为时间被调回了。
对于我的时间序列模型,我总是需要96个数据点,否则一天中的季节性就会变得混乱。
你有这方面的经验吗?您是否知道一个R函数或包将有助于自动处理此类数据--某种优雅的东西?谢谢!
发布于 2012-12-14 03:29:13
来自传感器的水文数据也有类似的问题。我的时间戳使用的是UTC+1 (CET),并没有转换为夏令时(UTC+2,CEST)。因为我不想让我的数据间隔一个小时(如果使用协调世界时就是这种情况),所以我采用了strptime的%z转换规范。在?strptime中,您可以找到:
%z已签署的时差为协调世界时的小时和分钟,so -0800比协调世界时晚8小时。
例如: 2012年,从标准时间到DST的转换发生在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"发布于 2012-12-14 01:32:35
如果你不想要夏令时,可以转换成没有夏令时的时区(例如,GMT,UTC)。
times <- .POSIXct(times, tz="GMT")发布于 2015-08-20 20:58:02
下面是获取夏令时偏移量的示例-例如,中部夏令时
> Sys.time()"2015-08-20 07:10:38 CDT“#我在美国/芝加哥夏令时
> as.POSIXct(as.character(Sys.time()), tz="America/Chicago")"2015-08-20 07:13:12 CDT“
> as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago")时差-5小时
> as.integer(as.POSIXct(as.character(Sys.time()), tz="UTC") - as.POSIXct(as.character(Sys.time()), tz="America/Chicago"))-5
一些灵感来自于
Converting time zones in R: tips, tricks and pitfalls
https://stackoverflow.com/questions/13865172
复制相似问题