2017-01-27 15 views
0

これはベテランのRプログラマにとっては非常に簡単ですが、私は解決策をオンラインで見つけることができません。2つのxtsオブジェクトのcbindでエラーが発生しました

私はxtsオブジェクトsym.rankから2番目の既存オブジェクトAの終わりまで列をバインドしようとしていますが、その結果、行数が増えます。 sym.rankのデータは、Aのデータに正しく整列される代わりに、基本的に下にシフトされます。

> str(A) 
An ‘xts’ object on 2005-01-31/2012-12-31 containing: 
Data: num [1:96, 1:6] 35.5 33.8 33.6 33.3 31.9 ... 
-attr(*, "dimnames")=List of 2 
..$ : NULL 
..$ : chr [1:6] "XLY.Open" "XLY.High" "XLY.Low" "XLY.Close" ... 
Indexed by objects of class: [Date] TZ: UTC 
xts Attributes: 
List of 2 
$ src : chr "yahoo" 
$ updated: POSIXct[1:1], format: "2017-01-27 00:42:13" 

> str(sym.rank) 
An ‘xts’ object on 2005-01-31/2012-12-31 containing: 
Data: num [1:96, 1:5] NA NA 5 5 4 2 2 3 5 5 ... 
- attr(*, "dimnames")=List of 2 
..$ : NULL 
..$ : chr 
[1:5] "XLY.Adjusted" "XLP.Adjusted" "XLE.Adjusted" "AGG.Adjusted" ... 
Indexed by objects of class: [POSIXct,POSIXt] TZ: 
xts Attributes: 
NULL 

>sym.rank 
     XLY.Adjusted XLP.Adjusted XLE.Adjusted AGG.Adjusted IVV.Adjusted 
2005-01-31   NA   NA   NA   NA   NA 
2005-02-28   NA   NA   NA   NA   NA 
2005-03-31   5   3   1   4   2 
2005-04-30   5   2   4   1   3 
2005-05-31   4   3   5   1   2 
2005-06-30   2   5   1   4   3 

> A 
     XLY.Open XLY.High XLY.Low XLY.Close XLY.Volume XLY.Adjusted 
2005-01-31 35.45 35.55 33.23  33.78 5464600  28.49650 
2005-02-28 33.82 34.36 33.33  33.60 5813500  28.34465 
2005-03-31 33.60 34.40 32.71  33.16 10675600  28.01342 
2005-04-30 33.30 33.47 30.62  31.05 12504000  26.23090 
2005-05-31 31.92 33.18 31.04  32.0  27.85291 
2005-06-30 33.10 33.88 32.68  32.78 7248700  27.73284 

> cbind(A,sym.rank[,1]) 
     XLY.Open XLY.High XLY.Low XLY.Close XLY.Volume XLY.Adjusted XLY.Adjusted.1 
2005-01-30  NA  NA  NA  NA   NA   NA    NA 
2005-01-31 35.45 35.55 33.23  33.78 5464600  28.49650    NA 
2005-02-27  NA  NA  NA  NA   NA   NA    NA 
2005-02-28 33.82 34.36 33.33  33.60 5813500  28.34465    NA 
2005-03-30  NA  NA  NA  NA   NA   NA    5 
2005-03-31 33.60 34.40 32.71  33.16 10675600  28.01342    NA 

あなたが見ることができるように、cbindコマンドの結果は、不要な行を紹介し、sym.rankからの実際の値は、不要な行で紹介されています。 ご協力いただければ幸いです。

+0

私の悪い、解決策を見つけました。以下を追加すると、問題が解決します: ttz <-Sys.getenv( 'TZ') Sys.setenv(TZ = 'UTC') しかし、なぜ誰も知っていれば、まだ知恵を聞くためにここにいない場合は、 – Hysterio

+0

あなたの現在のタイムゾーンを取得するtz属性を指定します。 –

+0

ありがとう、大変感謝しています! – Hysterio

答えて

0

str()出力の "Indexed by objects ..."部分に注目してください。

> str(A) 
#... 
Indexed by objects of class: [Date] TZ: UTC # Date index, UTC timezone 
> str(sym.rank) 
#... 
Indexed by objects of class: [POSIXct,POSIXt] TZ: # POSIXct index, no timezone 

Dateオブジェクトは、タイムゾーンを持っていないので、彼らは常に、XTSインデックスにUTCで処理されています。 POSIXct(およびPOSIXlt)オブジェクト常ににはタイムゾーンがあります。 timezone属性が指定されていない場合、コンピュータの現在のタイムゾーンが決定され、使用されます(これは、使用しているOSと設定によって異なります)。

あなたはsym.rankをどのように作成したかは言いませんが、何とかPOSIXctインデックスで作成しました。毎日のデータしかないので、代わりにDateのインデックスを使用する必要があります。あなたは経由でそれを変換することができます:

index(sym.rank) <- as.Date(index(sym.rank)) 
# now this should work without adding rows 
merge(A, sym.rank) 
関連する問題