使用R将每日转换为每周/每月数据

时间:2013-05-08 13:46:15

标签: r xts zoo quantmod

我在各种产品上都有每日价格系列;我想转换为包含每周或每月数据的新数据框。

enter image description here

我首先使用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)]

会有更有效的方法吗? 感谢。

2 个答案:

答案 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), ]

简短并清理甚至复制列名。