R中每5天滚动标准偏差

0 r standard-deviation

我有一个时间序列数据框,看起来像

2014-02-05 2014-02-06 2014-02-07 2014-02-12 2014-02-14 2014-02-17 2014-02-18 2014-02-19 ......
    0.0379    -0.0008     0.0352     0.0379     0.0392     0.0173     0.0360     0.0371
Run Code Online (Sandbox Code Playgroud)

我要计算每5天的数据从这个名单中R.移动标准差我的意思是说,我希望选择在形式的样品,以便SAMPLE1 [1] = 2014-02-05,0.0379,SAMPLE1 [ 2] = 2014年2月12日,0.0379 .....然后找到该样品的标准偏差,然后使用滚动标准偏差就移动到下一个日期即SAMPLE2 [1] = 2014年2月6日, -0.0008,sample2 [2] = 2014-02-12,0.0379并找到该列表的标准差,依此类推.由于可用日期不规则,我不能使用seq(1:l,by =).在rollapply中,函数将采用每个连续的数字来计算标准偏差.有没有办法以有效的方式从该列表中每隔5天采样一次数据,或以某种方式修改标准差函数,使其每隔5天选择一次数据,然后计算可用数据的标准差.任何有关这方面的建议都将受到高度赞赏.

G. *_*eck 5

重述问题我假设你想填写缺失的日子然后如果z是结果系列计算以下

sd(c(z[1], z[6], z[11], z[16], z[21]))
sd(c(z[2], z[7], z[12], z[17], z[22]))
etc.
Run Code Online (Sandbox Code Playgroud)

但只保留那些有时开始的sd sample1.

如果这不是问题的意图,请通过进一步的解释和给出输入和输出的实际例子来澄清.

回答创建一个每日网格g并合并sample1填写从最后给出填充系列的NA z.(请注意,如果点的间隙大于4天,那么我们不会填补这些间隙,因为这将涉及在sd中多次包含点.)然后使用rollapply计算所需的sd仅保留原始时间.

g <- zoo(, seq(start(sample1), end(sample1), "day"))
z <- na.locf(merge(sample1, g), fromLast = TRUE, maxgap = 4)
r <- rollapply(z, 21, function(x) sd(x[seq(1, 21, 5)]), align = "left")
r[time(sample1)]
Run Code Online (Sandbox Code Playgroud)

注意rollapply语句也可以这样写:

r <- rollapply(z, list(seq(0, length = 5, by = 5)), sd)
Run Code Online (Sandbox Code Playgroud)

因为width参数可以指定为包含偏移向量的列表.

重新阅读问题后再次更新.还提供了替代rollapply表达.