2017-10-06 71 views
0

我正在尋找一種方法來計算像here但根據特定的觀察(移動計數)來改變標準的能力的觀察。計數觀測

例如 - (從最後的50)計數的MAG的觀測數其比MAG的特定觀察更大。 代碼我有:

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

此代碼取50個最後觀測的平均MAG和計算高於平均觀測值的數目(在整個數據集)。

我錯過了什麼? 也許使用rollapply不是這種情況? 總結:
1.根據特定行值計數
2.僅在50個最後的觀察值(而不是整個數據列)中進行計數。

+0

第一個問題是'i'在你的函數是 「窗口」 數據和'mag',如你說,在整個專欄。所以代碼絕對不是你上面說的。此外,沒有樣本數據和預期的輸出,如果可以的話,請添加它。 –

回答

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 
+1

非常感謝m-dz! 我沒有太多的R經驗 - 我會嘗試學習如何根據您的建議進行調試。 –