使用带有动态标准的 zoo 包中的 rollapply 计算观察值

Count observations using rollapply from zoo package with dynamic criteria

我正在寻找一种方法来计算像 here 这样的观察值,但能够根据特定观察值(移动计数)更改标准。

例如 - 计算大于特定 mag 观测值的 mag 观测值(从最近 50 次开始)的数量。 我的代码:

rollapplyr(zoo(mag),50,function(i){sum(mag>i)},partial=T,by.column=F,fill=NA))

此代码采用最后 50 个观测值的平均值,并计算高于该平均值的观测值数量(在整个数据集中)。

我错过了什么? 也许在这里使用 rollapply 不是这种情况? 总结一下:
1.按特定行值统计
2. 只计算最后 50 个观察值(而不是整个数据列)。

请看下面的"corrected"函数:

set.seed(2017)
mag <- sample(x = 1000, size = 20)

## Your function, see what is printed
# my_fun <- function(i) {
#   print(i)
#   print(mag)
#   sum(mag > i)
# }

## Corrected one
my_fun <- function(i) {
  print(i)
  print(tail(i, 1))
  sum(i > tail(i, 1))
}

# debug(my_fun)  # Play a little with debug(), it is worth it!

mag_out <- zoo::rollapplyr(
  # zoo::zoo(mag),
  mag,
  5,
  my_fun,
  partial = TRUE,
  by.column = FALSE,
  fill = NA
)

rbind(
  mag,
  mag_out
)

输出:

        [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
mag      244  329  987  833  524  112  869  327  488   691    89   224   206    73   803   868   288   365   666   145
mag_out    0    0    0    1    2    4    1    3    2     1     4     3     3     4     0     0     2     2     2     4