2016-05-11 19 views
0

xts/zoo時系列を週単位でRに分割したいと思います。タイムゾーンは、「アジア/コルカタ」に設定されて毎週分裂時系列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) 

このsplitの問題は、私はそれがためです知っ

> 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 

以下のように毎週データは午前5時30分時間によって相殺されていることですタイムゾーン(アジア/コルカタの場合は5:30時間)。私はこれがendpoints機能を使って調整できるとも信じていますが、修正するのが難しいと感じています。誰でもいくつかのポインタを提供できますか?

答えて

1

私が正しく理解していれば、すべての要素に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

あなたのコードは完全に罰金です、あなただけの上記のコード内の3行目にタイムゾーンパラメータ(等価である「UTC」または「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」でない場合には、あなたはこの事実をあなたは認識させる警告が表示されます。

関連する問題