每周在R中分割时间序列

时间:2016-05-11 15:38:55

标签: r time-series xts zoo

我希望每周在FORCE_PROTO = 'https' FORCE_DOMAIN = 'my.domain.com' FORCE_PORT = 8000 分割xts/zoo个时间序列。时区设置为" Asia / Kolkata"

R

这个Sys.setenv(TZ="Asia/Kolkata") library(xts) seqs<- seq(as.POSIXct("2016-01-01"),as.POSIXct("2016-01-30"), by = "30 mins") ob<- xts(data.frame(value=1:(length(seqs))),seqs) weekdata <- split(ob,f="weeks",k=1) 的问题是每周数据会在5:30之前抵消,如下所示

split

我知道这是由于时区(亚洲/加尔各答的5:30)。我也相信这可以通过使用> head(weekdata[[2]],2) value 2016-01-04 05:30:00 156 2016-01-04 06:00:00 157 > head(weekdata[[3]],2) value 2016-01-11 05:30:00 492 2016-01-11 06:00:00 493 函数进行调整,但我觉得难以修复。任何人都可以提供一些指示吗?

2 个答案:

答案 0 :(得分:1)

因此,如果我理解正确,您所需的输出是xts列表,其中每个元素都有一周的数据。 你可以这样做:

Sys.setenv(TZ="Asia/Kolkata")
library(xts)
library(lubridate)
seqs = seq(as.POSIXct("2016-01-01"),as.POSIXct("2016-01-30"), by = "30 mins")
weeks <- week(seqs)
df <- data.frame(seqs, weeks)
ob <- xts(data.frame(value=1:(length(seqs))), seqs)
weekdata = lapply(unique(weeks), function(i){
   ob[weeks == i]
})

答案 1 :(得分:1)

您的代码非常好,您只需要在上面代码的第3行添加一个时区参数(&#34; UTC&#34;或“GMT”,这是等效的),您无需更改时区环境变量,如果您忘记重置变量,则始终存在危险。无需从df转换为xts等。

seqs<- seq(as.POSIXct("2016-01-01 00:00:00","UTC"),as.POSIXct("2016-01-30 00:00:00","UTC"), by = "30 mins”)

> both(weekdata[[2]])

                    value
2016-01-04 00:00:00   145
2016-01-04 00:30:00   146
2016-01-04 01:00:00   147
                    value
2016-01-10 22:30:00   478
2016-01-10 23:00:00   479
2016-01-10 23:30:00   480

如果您当前的时区不是“UTC”,您会收到警告,提醒您注意这一事实。