2017-06-22 9 views
1

私はXTSオブジェクトに複数の変数があり、それぞれの変数にカスタム属性を追加したいと思います。 xtsvignetteにはこれに関するガイダンスがいくつかあります(20ページ)。私はXTSオブジェクト(またはオブジェクトのリスト)内の各変数にこれらの属性の個別の値を設定します。 xtsAttributesxtsのクエリに割り当てることはできません。これは正しいのですか?もしそうなら、次の解決策のどれがベストですか(あるいは代替案を提示しますか?)XTSフィルタ/クエリの結果にxts-attributesを追加する

a)XTSオブジェクトをXTSオブジェクトのリストに分割し、個々に属性を割り当てます。 (可能性のあるオプションですが、すべての変数を同じ時間インデックスにバインドしたいので理想的ではありません)b)単一のXTSオブジェクトと共にインデックスの参照テーブルを保持し、これらの属性を取得します別々に。 (汚い)

c)は、この(疑わしい)

コードの参照を処理するためにxtsクラスを拡張:ここ

a<-xts(matrix(1:4, ncol=2, nrow=2), as.Date(c("2015-01-01","2018-01-01"))) 
xtsAttributes(a[,1])<-list(myattr="foo") 
xtsAttributes(a[,1]) 
#NULL 
xtsAttributes(a)<-list(myattr="foo") 
xtsAttributes(a) 
#[1] "foo" 

答えて

1

は、いくつかの意見/提案は以下のとおりです。

「私はXTSを持っています複数の変数を持つオブジェクトと私は、各変数にカスタム属性を追加したい。

xtsオブジェクトには複数の変数がありません。 xtsオブジェクトは、基本的にデータの行列(典型的には数値型または文字型)と時間ベクトル(型日付またはPOSIXct)からなる。

これはかなりのことはありません「私はxtsAttributesがXTSクエリに割り当てることができないと考えている。XTSオブジェクト(またはオブジェクトのリスト)内の各変数は、これらの属性のために別々の値を持つようにしたいです」私には感謝しますが、異なる列名に対して異なる属性が必要なことを意味するかもしれません。その場合、リストの名前にxtsオブジェクトの列名を反映させることができます。例えば

xtsAttributes(a)<-list(Open = "a", Close = list(1:10, rep("A", 3)), Volume = "NYSE") 

アクセスxtsAttributes(a)$Openを使用して属性値など

xtsAttributes単にXTSは、あなたがサブセットのようなことを行う場合(時間による)消えませんXTSオブジェクトにメタデータを付加する方法ですオブジェクト。あなたの例を使用する:

> str(a) 
An ‘xts’ object on 2015-01-01/2018-01-01 containing: 
    Data: int [1:2, 1:2] 1 2 3 4 
    Indexed by objects of class: [Date] TZ: UTC 
    xts Attributes: 
List of 1 
$ myattr: chr "foo" 
> b <- a["2015"] 
> str(b) 
An ‘xts’ object on 2015-01-01/2015-01-01 containing: 
    Data: int [1, 1:2] 1 3 
    Indexed by objects of class: [Date] TZ: UTC 
    xts Attributes: 
List of 1 
$ myattr: chr "foo" 

b

はまだメタデータ fooが含まれています。

あなたのメタデータの時間インデックスを持つようにしたい場合は、別のXTSは、この目的のためにオブジェクトを作る:

> xx <-xts(matrix(c("Annoucement1", "Announcement2")), as.Date(c("2015-01-01","2018-01-01"))) 
> xx 
      [,1]   
2015-01-01 "Annoucement1" 
2018-01-01 "Announcement2" 
# Return all announcements up to 2016 
> xx["/2016"] 
      [,1]   
2015-01-01 "Annoucement1" 

a)と、彼らが上がらない場合b)は、おそらくより良い他の方法に対処することができます」 xtsAttributesに入ることができる "時代を超越した"メタデータです。たぶんdata.frameアイテムのリスト(各リストアイテムが特定のシンボルに対応する)がうまくいくでしょう。

c)早すぎる最適化(コード)のように聞こえます...あなたが心に留めている拡張されたクラスのための繰り返しのユースケースが本当にあると確信している場合にのみ、それを行います。

個人的には、私はxtsAttributesの必要性を見いだせませんでした。あなたの問題に対処するための一つの方法として、財務データのユースケースを考えてみましょう。財務データの関連データを株式に保管するか、金融商品を別の関連オブジェクトに保管します。たとえば、R quantstratライブラリでは、stock個のオブジェクト(FinancialInstrumentパッケージからのもの)が、xtsオブジェクトの在庫の時系列財務データに関連付けられています。詳細については、quantstratのデモを参照してください。その場合の財務データ(xtsオブジェクト)とメタデータ(「在庫オブジェクト」内)との間の「マップ」/「キー」は、株式の名前です。例えば

library(quantmod) 
library(FinancialInstrument) 

> getSymbols("AAPL") 
> head(AAPL) 
      AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted 
2007-01-03 95.539 95.860 90.679 83.80000 309579900  10.81246 
2007-01-04 93.059 95.163 92.804 85.66000 211815100  11.05245 
2007-01-05 94.964 95.440 93.447 85.04999 208685400  10.97374 
2007-01-08 95.174 95.805 94.421 85.47000 199276700  11.02793 
2007-01-09 95.716 102.946 94.277 92.57000 837324600  11.94403 
2007-01-10 104.906 108.283 103.467 97.00000 738220000  12.51562 

currency("USD") 
[1] "USD" 
# You could add meta data here: 
> stock("AAPL", currency = "USD", tick_size = 0.01, identifiers = list("foo" = 1233, "blah" = "text")) 
[1] "AAPL" 
# Want to get meta data for the `AAPL` xts object 
> getInstrument("AAPL") 
primary_id :"AAPL" 
currency :"USD" 
multiplier :1 
tick_size :0.01 
identifiers:List of 2 
..$ foo :1233 
..$ blah:"text" 
type  :"stock" 
+0

おかげ - TSコンテキスト内の変数は、XTSオブジェクトの列に等しいです。私はquantstratパッケージを見ていましたが、これは一般的なtimeseriesの問題(金融/取引に限定されているわけではありません)を考慮して使用しないことを選択しました。メタデータは時間制限されておらず、あなたが示唆するようにXTSオブジェクトに対する共通のIDセットを持つ別々のdata.frame/tblで管理するのが最適です。詳細な対応に感謝します。 – Schwartz

関連する問題