簡體   English   中英

在 R 中每小時拆分時間序列數據

[英]Split time series data hourly in R

我有以 10 分鍾的速率采樣的時間序列數據。 我想按小時拆分它,但令我驚訝的是split.xts沒有產生預期的結果。 使用的步驟是:

library(xts)
set.seed(123)
Sys.setenv(TZ="Asia/Kolkata")
timeind <- seq(as.POSIXct("2017-01-20 00:00:00 IST"),
               as.POSIXct("2017-01-20 23:59:59 IST"),by="10 min") #for indexing
df <- xts(runif(length(timeind),30,50),timeind) #xts data frame 
split(df,"hours",k=1)

輸出是:

[[1]]
                        [,1]
2017-01-20 00:00:00 31.24343
2017-01-20 00:10:00 32.57921
2017-01-20 00:20:00 40.17684

[[2]]
                        [,1]
2017-01-20 00:30:00 41.89185
2017-01-20 00:40:00 30.93997
2017-01-20 00:50:00 31.76651
2017-01-20 01:00:00 49.07364
2017-01-20 01:10:00 34.79113
2017-01-20 01:20:00 48.13881

預期輸出為:

[[1]]
                        [,1]
2017-01-20 00:00:00 31.24343
2017-01-20 00:10:00 32.57921
2017-01-20 00:20:00 40.17684
2017-01-20 00:30:00 41.89185
2017-01-20 00:40:00 30.93997
2017-01-20 00:50:00 31.76651

[[2]]
2017-01-20 01:00:00 49.07364
2017-01-20 01:10:00 34.79113
2017-01-20 01:20:00 48.13881
...

為什么split.xts不能正常工作?

這是一個已知的錯誤 如果索引時區恰好不是與 UTC 的整整小時偏移量,則endpoints無法正常工作(因為其計算基於 UTC)。

例如,亞洲/加爾各答是 UTC+0530,因此endpoints按半小時對齊。

一種可能的解決方法是在調用split之前向索引添加 30 分鍾,然后從結果的每個元素中減去 30 分鍾。 雖然這可能會導致夏令時問題,但如果時區遵守一個。

df_adjusted <- df
.index(df_adjusted) <- .index(df_adjusted) - 60 * 30
by_hour <- lapply(split(df_adjusted, "hours"),
           function(x) { .index(x) <- .index(x) + 60 * 30; x })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM