1

我有一个每日数据的数据框: df 有四列:Date, A, B, C 并且我试图按列获取每周数据的平均值。我试过:

library(xts)
xdf <- xts(df[ ,-1],as.Date(df$Date))

apply.weekly(xdf,mean)

但这给了我所有列的平均值。我需要每列的每周平均值。

感谢您的帮助

4

1 回答 1

8

首先获取一些数据(我将使用 adata.frame因为这就是您正在使用的,但我真的建议您对时间序列对象使用时间序列类)

getSymbols("SPY", src='yahoo', from='2012-05-01', to='2012-06-15',
           return.class='data.frame')
#"SPY"

apply.weekly将按周拆分数据并每周应用一个函数。apply.weekly(SPY, mean)将计算该周所有数据的平均值,但您希望它计算每周每列的平均值。所以,你必须apply mean对每一列

apply.weekly(SPY, function(x) apply(x, 2, mean))
#           SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted
#2012-05-04 139.6425 140.4675 138.750  139.3275  149400050     138.6075
#2012-05-11 135.9480 136.9320 135.338  136.2040  173105700     135.5020
#2012-05-18 133.3000 133.9180 132.036  132.1760  229282720     131.4960
#2012-05-25 131.7660 132.6800 130.896  132.2140  176634780     131.5340
#2012-06-01 131.7100 132.8925 130.290  131.2725  191170200     130.5950
#2012-06-08 130.2780 131.3380 129.584  130.8580  175917220     130.1820
#2012-06-15 132.8420 133.7760 131.828  132.8020  184751180     132.2540

作为参考,apply.weekly是一个包装器,period.apply因此您也可以使用

period.apply(SPY, endpoints(SPY, "weeks"), FUN=function(x) apply(x, 2, mean))
于 2012-06-20T23:29:21.840 回答