2013-04-24 19 views
6

です。動物園のパッケージには、移動平均を行うことができるrollmeanという関数があります。 rollmean(x,3)は、下の表の前の現在値と次の値(つまり4,6,2)を使用します。これは第2列に示されています。前の3つの値の移動平均はR

x rollmean ma3 
4  
6 4.0 
2 4.3 
5 3.0   4.0 
2 6.3   4.3 
12 6.0   3.0 
4 6.0   6.3 
2    6.0 

私は同じ仕事をしたいと思いますが、4番目の行の前の3つの値を平均化してみたいと思います。これは3列目に表示されます。誰でも私にこれを達成するのに役立つ関数の名前を教えてもらえますか?

+2

あなたは 'フィルタ(X、担当者(1/3,3)、側面= 1)'使用することができ – rinni

答えて

2

:別の解決策は、width引数のリストをrollapplyを使用することです。私は最後に、rinniがコメント内で与えるフィルタ関数に基づいて関数を拡張した関数を書いています(しかし、それは3周期の平均で現在の観測値を含むので機能しません)。

  1. 電流を含まない、平均関数を移動探し

    mavback <- function(x,n){ 
        a<-mav(x,1) 
        b<-mav(x,(n+1)) 
        c<-(1/n)*((n+1)*b - a) 
        return(c) 
    } 
    
  2. 逆方向電流の観測が含まれていない平均関数を移動現在の観察

    mav <- function(x,n){filter(x,rep(1/n,n), sides=1)} 
    
  3. を含む平均関数を移動obs、[h1]ピリオドを開始した[h2]読み取り値に基づいて

    mavback1<-function(x,h1,h2){ 
        a<-mavback(x,h1) 
        b<-mavback(x,h1-h2) 
        c<-(1/h2)*(h1*a -(h1-h2)*b) 
        return(c) 
    } 
    
10

rollmeanを使用できますが、align='right'を設定してください。または、rollmeanrを使用すると、align='right'がデフォルトとして使用されます。

ma3 <- rollmeanr(x[,1],3,fill=NA) 

...しかし、あなたはまだ結果を遅らせる必要があります。私は私が必要なものを行うにはある程度の柔軟性を持っていた平均値を移動するための簡単な関数を探しに苦労

ma3 <- rollapplyr(x[,1],list(-(3:1)),mean,fill=NA) 
0
彼のMAV関数に基づい

w_i_l_lのmavback関数のsimplier実装

mavback <- function(x,n){ filter(x, c(0, rep(1/n,n)), sides=1) }

関連する問題