使用带有动态标准的 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
我正在寻找一种方法来计算像 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