rollapply用于选择行数,不包括前6行

时间:2017-11-21 09:55:16

标签: r mean rollapply

我一直在尝试实现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)

对此有何帮助?

1 个答案:

答案 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