我希望每周在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
函数进行调整,但我觉得难以修复。任何人都可以提供一些指示吗?
答案 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”,您会收到警告,提醒您注意这一事实。