xts オブジェクトは時間インデックスのみでソートされます。他のもので並べ替えることはできません。
で data.frame をリストに分割することをお勧めしますgvkey
。次に、各リスト要素を xts に変換し、時間の経過とともに変化しない列を削除して、 として保存しますxtsAttributes
。yearmon
毎月のデータを扱っているため、クラスの使用を検討することもできます。
xts オブジェクトでは型を混在させることができないため、非数値の時変値をエンコードする方法を決定する必要があります。
Data <- read.csv('monthly.csv', nrow=1000, as.is=TRUE)
DataList <- split(Data, Data$gvkey)
xtsList <- lapply(DataList, function(x) {
attrCol <- c("iid","tic","cusip","conm","exchg","secstat","tpci",
"cik","fic","conml","costat","idbflag","dldte")
numCol <- c("ajexm","ajpm","cshtrm","prccm","prchm","prclm",
"trfm", "trt1m", "rawpm", "rawxm", "cmth", "cshom", "cyear")
toEncode <- c("isalrt","curcdm")
y <- xts(x[,numCol], as.Date(x$datadate,format="%d/%m/%Y"))
xtsAttributes(y) <- as.list(x[1,attrCol])
y
})
各リスト要素は xts オブジェクトになり、完全に冗長なデータを繰り返さないため、はるかにコンパクトになります。gvkey
また、ビアlapply
やフレンドごとに簡単に解析を実行できます。
> str(xtsList[["1004"]])
An ‘xts’ object on 1983-01-31/2012-12-31 containing:
Data: num [1:360, 1:13] 3.38 3.38 3.38 3.38 3.38 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:13] "ajexm" "ajpm" "cshtrm" "prccm" ...
Indexed by objects of class: [Date] TZ: UTC
xts Attributes:
List of 13
$ iid : int 1
$ tic : chr "AIR"
$ cusip : int 361105
$ conm : chr "AAR CORP"
$ exchg : int 11
$ secstat: chr "A"
$ tpci : chr "0"
$ cik : int 1750
$ fic : chr "USA"
$ conml : chr "AAR Corp"
$ costat : chr "A"
$ idbflag: chr "D"
$ dldte : chr ""
そして、次の方法で属性にアクセスできますxtsAttributes
。
> xtsAttributes(xtsList[["1004"]])$fic
[1] "USA"
> xtsAttributes(xtsList[["1004"]])$tic
[1] "AIR"