0

我有两个 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
4

2 回答 2

1

我不认为 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
于 2011-04-18T01:23:56.913 回答
1

鉴于您的最新评论,我认为您可以通过以下两种方式之一做您想做的事:

  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
于 2011-04-20T00:20:48.810 回答