使用来自动物园包的rollapply计算观察值,并使用动态标准

时间:2017-10-06 09:00:58

标签: r zoo rollapply

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

例如 - 计算mag的观测数量(从最后50个),大于特定的mag观测值。 我的代码:

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

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

我错过了什么? 也许使用rollapply不是这里的情况? 总结一下:
1.根据具体行数计数
2.仅计算最后50个观察结果(而不是整个数据列)。

1 个答案:

答案 0 :(得分:2)

请参阅"更正"功能如下:

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