我在各种产品上都有每日价格系列;我想转换为包含每周或每月数据的新数据框。
我首先使用xts来应用to.weekly函数...它仅适用于OHLC格式。 我确信可能存在类似于to.weekly的函数,但对于格式不是OHLC的数据帧。
有与此相关的不同帖子如下: Does rollapply() allow an array of results from call to function? 或Averaging daily data into weekly data
我最终使用:
长度(胸罩)
1 2416
试验< -bra [SEQ(1,2416,7)]
会有更有效的方法吗? 感谢。
答案 0 :(得分:12)
让我们试试这些数据:
library(zoo)
tt <- seq(Sys.Date(), by='day', length=365)
vals <- data.frame(A=runif(365), B=rnorm(365), C=1:365)
z <- zoo(vals, tt)
现在我定义一个提取年份和周数的函数(如果您不需要区分年份,则删除%Y
):
week <- function(x)format(x, '%Y.%W')
您可以使用此函数将zoo
对象与均值(例如)聚合:
aggregate(z, by=week, FUN=mean)
产生这个结果:
A B C
2013.18 0.3455357 0.34129269 3
2013.19 0.4506297 0.57665133 9
2013.20 0.3950585 0.46197173 16
2013.21 0.5990886 -0.02689994 23
2013.22 0.5115043 0.18726564 30
2013.23 0.5327597 0.16250339 37
答案 1 :(得分:4)
我对R很新,但在遇到类似问题时偶然发现了这个问题。我需要转换不是OHLC的xts数据。 to.monthly表示它可以处理单变量系列,但它也在细节中说它只支持返回OHLC。我认为只需设置OHLC = FALSE即可。 或者,to.period的源代码使用以下函数,这对我来说甚至可以转换几个系列(都具有相同的时间索引)
data.monthly <- data[ endpoints(data, on="months", k=1), ]
简短并清理甚至复制列名。