2016-04-13 6 views
0

の中間値を除いて、移動平均の計算:Iのように移動平均を計算するためにRで<code>rollmean</code>を使用しているR

> x = c(3, 8, 12, 5, 9, 6, 8) 
> rollmean(x, 7) 
[1] 7.285714 

Rollmeanは、中間値を含み、奇数の入力を受け取り、移動平均を算出します(この場合は5)。しかし、私は中間値の周りの影響を評価するために、それを除いて、値の周りでMAを計算することを可能にする関数があるかどうかを知りたいと思います。この例を使用すると、中間値5を含まない3 + 8 + 12 + 9 + 6 + 8の平均が使用されます。利用可能なものがあれば、複雑な関数を書く必要はありません。

ありがとうございます!

答えて

1

rollapply(ローリングウィンドウにカスタム関数を適用できる)を使用して、中間値を除外する簡単な関数を記述できます。たとえば:eipi10 @

my_mean = function(x) { 
    if(length(x) %% 2 == 0L) { return(mean(x)) } 
    if(length(x) %% 2 == 1L) { return(mean(x[-ceiling(0.5*length(x))])) } 
} 

# Fake data 
set.seed(5) 
values = cumsum(rnorm(20)) 

library(zoo) 

rollapply(values, width=5, FUN=my_mean) 
[1] 0.032599697 0.341949790 -0.223156076 -0.054644590 -0.007797604 -0.313482549 -0.248932331 -0.372755845 
[9] -0.880215212 -0.848262308 -1.049123185 -1.822352744 -2.315909292 -3.318552855 -4.107026776 -4.295736122 
+0

おかげで、私は、関数を作成するために有するケースかもしれないと思いました。 Rであなたの例を実行するとうまくいきます。私は、roll適用の 'width'が使用されるウィンドウと中間値を提供することを知りました。 2つのIF文を簡単に説明していただきたいのですが、あなたが書いた機能をよりよく理解できるように、ありがとうございます。 – Qaribbean

+0

はい、「幅」はウィンドウサイズです。 'if'ステートメントは' width'が偶数か奇数かをチェックします。 'length(x)%% 2'は2で除算した後の剰余を返します。 – eipi10

+0

大変ありがとう! – Qaribbean

関連する問題