2010-12-14 3 views
5

xtsオブジェクトを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 

おかげで、
ビル

答えて

2

時系列の日付は、 "[" で参照されていません。彼らはデータフレームのrownamesによく似ています。それらは属性リストの「インデックス」リーフに格納されます。

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

編集:より正確に属性$インデックスは秒単位で内部的であるが、時間の方法ということに加えてPOSIXct、彼らはDateクラスのではなく、むしろ、DateTimeクラスは、あなたが する必要が使用することができますので、さまざまな割り当てクラスを受け入れます。

+0

属性が機能することを覚えています。私はまだそのメソッド( "time < - ")のことに取り組んでいます。 as.Date()ではなく、as.POSIXct()を使用することをお勧めしますか?ほとんどの私の時間データは毎日または毎月のデータです(分と秒の要件はまれですが、可能です)。 –

+0

この場合は、時間< - 機能があるため、必要ありません。これは、割り当てられているオブジェクトのクラスが最初に評価され、クラスDateのときに24 * 60 * 60と適切に乗算され、秒単位の内部表現に詰め込まれる前にオフセットが適用されることを意味します。 –

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

サブセットが新しいオブジェクトを作成するため上記junkの最初の行のインデックスを変更しない - junk --and time<-.xtsを参照せずに新しいオブジェクトのインデックスを置き換えます。

+2

時刻が< - 。xtsの場合を除きます。可視ではありませんが、メソッド( 'time < - ')で表示されます。 –

+0

@Dwin良いキャッチ。私は 'time'を見ていたのではなく、' time- 'を見ていた。それは私がベッドの前に投稿するために得るものです。 –

+0

それは理にかなっています。また、時間(ジャンク)[1]ステートメント(コードの最後のチャンク)では、ジャンクを参照する新しいサブセットオブジェクトが作成されますか?そして、その参考文献はジャンクを修正するよう強制しますか? –

7

ジョシュが言っているように、魔法はattr<-の中にあるということです。最初にオブジェクトをサブセット化すると、ただちに< - が完了したらすぐに処分される新しいオブジェクトが作成されます。

さらに、.index()機能を使用してインデックスの「内部」を見ることができます。基本的には、POSIXctにマップされるdouble型またはinteger型のベクトルです。いくつかの属性が付加されています。あなたが割り当てているクラスは、自動的に前後に強制的に強制されます。これにより、内部のメンテナンスが容易になります。また、必要な時間クラスを使用して、内部で作業を行うことができます。

一般的に、DateはTZを維持する最もクリーンな方法であり、ミックスの問題を解決しますが、この非表示のアスペクトのコストはindex()であることに注意してください。これは、期待するオブジェクトを再作成する必要があります。

+0

ようこそ、stackoverflow、Jeff! – Shane

関連する問題