如何在具有多个列的zoo对象中使用`apply.monthly`

sbg*_*sbg 7 r zoo

我有一个名为pp的动物园对象,包含每日数据和77列,如下所示:

            X02R X03N X04K X04N X04R X06I X06N X08J X08P X09O X11O X12L X14N X15G X16K  (...)
1961-01-01  8.3  5.2  3.2  0.0  8.7  5.2 15.0  7.2 11.5 13.0  0.0  4.9  0.0  2.9  6.0   
1961-01-02  1.1  3.2 10.0  0.0  0.0  3.5  0.0  8.7  0.4  1.2  0.0  0.4  0.0  3.2  0.2    
1961-01-03 12.0  4.2 50.5  0.0  9.0 38.5 15.0 31.7  1.7  8.7  9.0 69.2  4.2 22.2  9.2 
(...)  
Run Code Online (Sandbox Code Playgroud)

我想用到apply.monthly每一列,所以最后我仍然会有77列,但每月数据而不是每日数据.我试过, apply.monthly(pp, FUN=sum)但结果是一个只有一列的动物园对象(我想是添加所有列).

我也试了一个循环:

for (i in 1:77) { mensal<-apply.monthly(pp[,i], FUN=sum) } 但它也只产生一列(第77列).我可能能够通过一些试验和错误使循环工作,但计算需要很长时间(我有17897行和77列),我想有一种更简单的方法可以不使用循环...所以如果你知道怎么样,请帮忙.谢谢!

Jos*_*ich 10

为了apply.monthly返回具有多个列的对象,您必须使用按列操作apply的函数(或不使用的函数).

library(quantmod)
getSymbols("SPY")
zSPY <- as.zoo(SPY)
# sum doesn't operate by column; it sums everything to one value
sum(zSPY)
spy.sum <- apply.monthly(zSPY, sum)
# colSums operates by column
spy.colSums <- apply.monthly(zSPY, colSums)
# use apply to operate by column
spy.apply.sum <- apply.monthly(zSPY, apply, 2, sum)
Run Code Online (Sandbox Code Playgroud)