xts对象乘以R中的向量

时间:2014-05-26 09:14:44

标签: r xts

我在R

中有这个样本
    require("quantmod") ;
    getSymbols(c("AUD=X","GBP=X","JPY=X")) ;
    ccyportfolio <- merge(`AUD=X`[,4], `GBP=X`[,4], `JPY=X`[,4]) * c(50e+6, 50e+6, -80e+6) ;

但结果是

                  AUD.X.Close GBP.X.Close JPY.X.Close 
    2007-01-01    63000000   -40800000  5944000000
    2007-01-02    63000000    25500000 -9506400000
    2007-01-03  -100800000    25500000  5967000000
    2007-01-04    64000000   -40800000  5941500000
    2007-01-05    64000000    26000000 -9495200000
    2007-01-08  -102400000    26000000  5934500000

但我希望得到正确的结果,但不要理解为什么xts不能直接乘以向量。

                AUD.X.Close GBP.X.Close JPY.X.Close
    2007-01-01    63000000    25500000 -9510400000
    2007-01-02    63000000    25500000 -9506400000
    2007-01-03    63000000    25500000 -9547200000
    2007-01-04    64000000    25500000 -9506400000 
    2007-01-05    64000000    26000000 -9495200000
    2007-01-08    64000000    26000000 -9495200000

1 个答案:

答案 0 :(得分:1)

这与this问题有些联系。你得到的是回收规则的结果;这种行为的最简单覆盖可能是

df <- merge(`AUD=X`[,4], `GBP=X`[,4], `JPY=X`[,4])
v <- c(50e+6, 50e+6, -80e+6)
as.xts(t(t(df) * v)))

           AUD.X.Close GBP.X.Close JPY.X.Close
2007-01-01     6.3e+07    25500000 -9510400000
2007-01-02     6.3e+07    25500000 -9506400000
2007-01-03     6.3e+07    25500000 -9547200000
2007-01-04     6.4e+07    25500000 -9506400000
2007-01-05     6.4e+07    26000000 -9495200000
2007-01-08     6.4e+07    26000000 -9495200000

虽然我相信存在更易读的解决方案。