根据条件重新格式化xts对象

时间:2011-03-27 07:48:27

标签: r xts

我有一个xts对象,其中包含以下形式的一系列月度复合股票回报:

       AALBERTS ABN_AMRO ABN_LNAM ACCELL_G    AEGON___  
1973-01       NA       NA       NA       NA          NA
1973-02       NA       NA       NA       NA -4.42149834
1973-03       NA       NA       NA       NA  0.03759308
1973-04       NA       NA       NA       NA -1.09827283
1973-05       NA       NA       NA       NA -7.30252682
1973-06       NA       NA       NA       NA -8.98970349
1973-07       NA       NA       NA       NA -5.59685493
:             :        :        :        :            :
:             :        :        :        :            :

我想做出以下选择:选择那些股票,它们在 t 时都有有效的返回数据,并且在前一个中有效返回数据t-12 个月。满足上述标准的股票需要添加到以下列方式格式化的单独xts对象中:

1974-01    AEGON___       <mean of the values from t-12 to t>
1974-01    <other stock>  <mean of the values from t-12 to t>
1974-01    <other stock>  <mean of the values from t-12 to t>
:          :              :
1974-02    <other stock>  <mean of the values from t-12 to t>

到目前为止,我无法解决这个问题,因为此时我对R的经验和理解非常有限,所以任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

由于xts对象是具有索引属性的矩阵,因此不能混合类型。这意味着您希望结果看起来像什么的例子是不可能的。也就是说,您可以使用rollapply函数。

require(quantmod)
getSymbols("SPY;QQQQ")
x <- merge(ROC(Cl(SPY)),ROC(Cl(QQQQ)))
#mx <- rollapply(x, 12, mean, na.rm=TRUE)  # default align="center"
mx <- rollapply(x, 12, (mean), align="right")
head(mx)
#               SPY.Close    QQQQ.Close
# 2007-01-10           NA            NA
# 2007-01-11 0.0005932477  0.0008627708
# 2007-01-12 0.0006620534 -0.0009128343
# 2007-01-16 0.0019978226  0.0008508299
# 2007-01-17 0.0006291557 -0.0002853558
# 2007-01-18 0.0006238259 -0.0010075785