我在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
答案 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
虽然我相信存在更易读的解决方案。