0

2つの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

これらの別々の2次元行列を単一の3次元配列に「スタック」するにはどうすればよいですか?

次の線に沿った何か:

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
4

2 に答える 2

1

xts オブジェクトは 3 次元配列をサポートしていないと思います。おそらく、以下のような醜い解決策が必要になるでしょう。すべてを配列に入れると、数値が強制されます。ただし、配列は 1 つのデータ型しか持てないため、形式は異なりますが、少なくとも日付インデックスは保持されます。

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
于 2011-04-18T01:23:56.913 に答える
1

あなたの最新のコメントを考えると、次の 2 つの方法のいずれかでやりたいことができると思います。

  1. lapplyxts オブジェクトのリストで使用する
  2. eapply独自の環境に格納された xts オブジェクトで使用

getSymbols を使用した #2 の例 (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
于 2011-04-20T00:20:48.810 に答える