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