Объединить два объекта XTS (матрицы) в один массив в R - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть два объекта XTS.

> require(quantmod)

> getSymbols("GLD;SLV")
[1] "GLD" "SLV"

> head(SLV, n=2)
           SLV.Open SLV.High SLV.Low SLV.Close SLV.Volume SLV.Adjusted
2007-01-03   129.96   131.16  124.70    125.58    7480000        12.56
2007-01-04   126.04   127.97  125.45    125.80    3220000        12.58

> head(GLD, n=2)
           GLD.Open GLD.High GLD.Low GLD.Close GLD.Volume GLD.Adjusted
2007-01-03    63.58    64.02   62.00     62.28    8061900        62.28
2007-01-04    62.07    62.50   61.52     61.65    4858600        61.65

> NROW(SLV) == NROW(GLD)
[1] TRUE

Как вы можете «сложить» эти отдельные двумерные матрицы в один трехмерный массив?

Что-то вроде следующего:

metal <- xts_stacking_function (GLD, SLV)

class(metal)
[1] "array"

metal[1,,1]
              GLD.Open GLD.High GLD.Low GLD.Close GLD.Volume GLD.Adjusted
2007-01-03    63.58    64.02      62     62.28    8061900        62.28

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Учитывая ваш последний комментарий, я думаю, что вы можете сделать то, что вы хотите, одним из двух способов:

  1. использовать lapply со списком объектов xts
  2. использовать eapply с объектами xts, хранящимися в их собственной среде

Пример # 2 с использованием getSymbols (обратите внимание, что eapply возвращает список):

library(quantmod)
myEnv <- new.env()
getSymbols("GLD;SLV", env=myEnv)
eapply(myEnv, function(x) head(Cl(x),3))
# $SLV
#            SLV.Close
# 2007-01-03    125.58
# 2007-01-04    125.80
# 2007-01-05    121.80
# 
# $GLD
#            GLD.Close
# 2007-01-03     62.28
# 2007-01-04     61.65
# 2007-01-05     60.17
1 голос
/ 18 апреля 2011

Я не думаю, что объекты XTS поддерживают 3D-массивы.Возможно, вам понадобится ужасное решение, подобное приведенному ниже.Помещение всего в массив приводит вещи к числовым значениям.Но по крайней мере это сохраняет индекс даты, хотя и в другом формате, потому что массивы могут иметь только один тип данных.

require(quantmod)
getSymbols("GLD;SLV")
GLD <- cbind(index(GLD), as.matrix(GLD))
SLV <- cbind(index(SLV), as.matrix(SLV))
C <- array(,c(dim(GLD),2))
C[,,1] <- GLD
C[,,2] <- SLV
...