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

sar*_*adi 7 r zoo xts quantmod

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

在此输入图像描述

我首先使用xts来应用to.weekly函数...它只适用于OHLC格式.我确信可能存在类似于to.weekly的函数,但对于格式不是OHLC的数据帧.

有一个不同的帖子已经与此相关如下: rollapply()是否允许调用函数的结果数组? 或将每日数据平均为每周数据

我最终使用:

长度(胸罩)

1 2416

测试<-bra [SEQ(1,2416,7),]

会有更有效的方法吗?谢谢.

Osc*_*ñán 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)
Run Code Online (Sandbox Code Playgroud)

现在我定义一个提取年份和周数的函数(%Y如果不需要区分年份,则删除):

week <- function(x)format(x, '%Y.%W')
Run Code Online (Sandbox Code Playgroud)

您可以使用此函数将zoo对象与mean 进行聚合(例如):

aggregate(z, by=week, FUN=mean)
Run Code Online (Sandbox Code Playgroud)

产生这个结果:

                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
Run Code Online (Sandbox Code Playgroud)


小智 5

我对R相当陌生,但是在遇到类似问题时偶然发现了这一点。我需要转换不是OHLC的xts数据。to.monthly声明它可以处理单变量序列,但在细节上也说它仅支持返回的OHLC。我认为通过设置OHLC = FALSE可能会起作用。另外,to.period的源使用以下函数,该函数对我有用,甚至可以转换多个序列(所有序列都具有相同的时间索引)

data.monthly <- data[ endpoints(data, on="months", k=1), ]
Run Code Online (Sandbox Code Playgroud)

简短干净,甚至复制列名称。