2017-10-06 7 views
0

私はhereのような観測を数える方法を探していますが、特定の観測(移動回数)に基づいて基準を変更することができます。動的基準を用いた動物園パッケージからのrollapplyを使った観測

たとえば、magの特定の観測値より大きいmagの観測回数(過去50回)を数えます。 私が持っているコード:

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

このコードは、50回の最後の観察の平均MAGを取り、(全データセットにおける)その平均上記の観察の数を算出します。

私には何が欠けていますか? ロールアップを使用していますか? 要約:
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の経験があまりありません - 私はあなたの提案に従ってデバッグする方法を学ぼうとします。 –

関連する問題