我一直在尝试实现rollapply
并计算窗口长度2的平均值,不包括前6行。我的数据如下
Volume <- c(10406513,14252364,7235783,7235783,5593794,5825159,3887574,2959390, 5060051,5984374,5395609,5750741,6065117,4498997,6712159)
我想从窗口长度为2的第7个值计算平均值。输出应如下:
Volume Average
10,406,513
14,252,364
7,235,783
7,235,783
5,593,794
5,825,159
3,887,574
2,959,390
5,060,051
5,984,374
5,395,609 3,423,482
5,750,741 4,009,721
6,065,117 5,522,213
4,498,997 5,689,992
6,712,159 5,573,175
我尝试了以下代码,但它无效
window_length <- 2
mean <- function(Volume){mean(Volume)}
rolling_mean <- function(z, width){rollapply(Volume,lag = 6, width=width,FUN = mean, by.column = FALSE, align = "right")}
roll_mean <- rolling_mean(Volume,window_length)
我收到以下错误:
FUN错误(数据[posns],...):未使用的参数(滞后= 6)
对此有何帮助?
答案 0 :(得分:1)
关于错误消息,rollapply
函数不接受lag
参数,也不定义您定义的mean
函数,因此错误消息报告的参数不能使用。
使用您自己的mean
函数覆盖mean
函数,就像在问题中所做的那样,只是在寻找麻烦。此外,问题中的mean
函数不执行任何mean
本身不执行的操作,因此它实际上没有合理的定义。删除该定义。
关于问题本身,描述与所示的样本输出之间似乎存在一些差异。下面,假设样本输出符合要求。
以下是两种替代解决方案。
1)从示例输出中,您似乎想要采用宽度为11的窗口,然后在该窗口内取第7和第8个值的平均值,返回与向量相同的向量。输入。这给出了结果。
rollapplyr(Volume, 11, function(x) mean(x[7:8]), fill = NA)
## [1] NA NA NA NA NA NA NA NA NA
## [10] NA 3423482 4009721 5522213 5689992 5573175
2)另一种方法是用NA替换Volume中的前6个值,然后取第三个和第四个先前值的平均值。请注意,width =可以包含一个元素列表,其中包含我们在此处使用的偏移向量。
rollapplyr(replace(Volume, 1:6, NA), list(-(3:4)), mean, fill = NA)
## [1] NA NA NA NA NA NA NA NA NA
## [10] NA 3423482 4009721 5522213 5689992 5573175