我正在寻找一种方法来计算像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个观察结果(而不是整个数据列)。
答案 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