R 基于条件重新格式化xts对象

R 基于条件重新格式化xts对象,r,xts,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

我有一个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的经验和理解非常有限,所以非常感谢您的帮助。

因为xts对象是一个带有索引属性的矩阵,所以不能混合类型。这意味着你想要的结果是什么样的例子是不可能的。也就是说,您可以只使用rollappy函数

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

由于xts对象是具有索引属性的矩阵,因此不能混合类型。这意味着你想要的结果是什么样的例子是不可能的。也就是说,您可以只使用rollappy函数

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

如果你想要12个月的区块,那么它应该是t到t-11。如果你想要12个月的区块,那么它应该是t到t-11。啊,非常感谢你指出rollapply,只有在我的情况下,na.rm需要设置为FALSE。如果周期内的一个观察值包含na,那么周期应该被忽略。另外一个问题,我忘了在原来的主题中问,这是我在这里的第一篇帖子,抱歉的是,平均函数的结果需要放在期末,例如,如果期间是从1月到12月,那么全年的平均回报应该放在12月,而不是6月,接近期末的一半。如何实现?使用align=right将平均值结果放在滚动窗口的末尾。还请注意,您需要使用mean而不是mean来防止rollapply使用rollmean,因为它似乎没有按照您希望的方式处理NA。啊,非常感谢您向rollapply指出,只有在我的情况下,NA.rm需要设置为FALSE。如果周期内的一个观察值包含NA,则应忽略周期。另外一个问题,我忘了在原来的主题中问,这是我在这里的第一篇帖子,抱歉的是,平均函数的结果需要放在期末,例如,如果期间是从1月到12月,那么全年的平均回报应该放在12月,而不是6月,接近期末的一半。如何实现?使用align=right将平均值结果放在滚动窗口的末尾。还要注意,您需要使用mean而不是mean来阻止rollapply使用rollmean,因为它似乎没有按照您希望的方式处理NA。