這裏有一些意見/建議:
「我有一個XTS具有多個變量的對象,我想爲每個變量添加自定義屬性。「
一個xts對象沒有「多個變量」。基本上是一個數據矩陣(數字或字符類型的典型)和時間向量(類型爲日期或POSIXct)的xts對象撮合。
「我希望XTS對象(或對象的列表)中的每個變量有不同的價值觀,這些屬性。我相信xtsAttributes不能分配給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)或許可以更好地解決其他的方式,如果他們不是活得t「永恆」的元數據,可以在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軟件包,但選擇不使用它,因爲這是一個普遍的時間序列問題(不僅僅涉及金融/交易)。元數據不受時間限制,並且如您所建議的,可能最好在單獨的data.frame/tbl中進行管理,併爲XTS對象提供一組通用ID。非常感謝您的詳細回覆。 – Schwartz