6

2行のxtsオブジェクトを作成します。

library(xts)   
junk<-xts(c(1,2),as.Date(c("2010-01-01","2010-05-01")))   
junk   
>            [,1]
> 2010-01-01    1   
> 2010-05-01    2   

以下が最初の行のインデックスを変更しないのはなぜですか?

time(junk[1])<-as.Date("2010-02-01")   
junk   
>            [,1]
> 2010-01-01    1   
> 2010-05-01    2   

次のことがうまくいくと思いますが、なぜ上記がうまくいかないのですか?

time(junk)[1]<-as.Date("2010-02-01")   
junk   
>            [,1]
> 2010-02-01    1   
> 2010-05-01    2   

ありがとう、
ビル

4

3 に答える 3

6

attr<-投稿に対する直接的な答えは、ジョシュが言うように、魔法は内部にあるということです. オブジェクトを最初にサブセット化すると、 time<- が終了するとすぐに破棄される新しいオブジェクトが作成されます。

さらに、.index()関数を介してインデックスの「内部」を確認できます。基本的に、POSIXct 時間にマップされる double または integer 型のベクトル - いくつかの属性が付加されています。割り当てているクラスは、自動的に前後に強制されます。これにより、内部の保守が容易になり、外部で必要な時間クラスをいつでも使用できるようになります。

一般に、日付は TZ と秒の問題を混在させないための最もクリーンな方法ですが、この隠れた側面の代償が関数であることを覚えておいてindex()ください。これにより、期待するオブジェクトを再作成する必要があります。

于 2011-01-28T22:37:13.887 に答える
3
time(junk[1]) <- as.Date("2010-02-01") 

上記は の最初の行のインデックスを変更しません。これはjunk、サブセット化によって新しいオブジェクトが作成され (参照なしで)、新しいオブジェクトのjunkインデックスtime<-.xtsが置き換えられるためです。

于 2010-12-14T02:53:32.780 に答える
2

時系列の日付は「[」で参照されません。それらは、データフレームの行名に似ています。それらは、属性リストの「インデックス」リーフに格納されます。それに加えて、それらはDateクラスではなく、DateTimeクラスであるため、 POSIXctを使用する必要があります。

> attributes(junk)$index[1] <- as.POSIXct("2010-02-01")
> junk
           [,1]
2010-02-01    1
2010-05-01    2

編集:より正確には、attribute $ indexは内部的に秒単位ですが、timeメソッドはさまざまな割り当てクラスを受け入れます。

于 2010-12-14T01:55:55.390 に答える