欠損データを含む移動平均穴が開いているデータの移動平均を計算しようとしています。 欠損値のないデータのみを含み、欠損値のない行の結果のみを計算する移動平均を計算する方法を理解できないようです。 任意の提案は大歓迎です。
New Table( "Untitled 5",
Add Rows( 30 ),
Compress File When Saved( 1 ),
New Table Variable( "Moving Avg Window", 5 ),
New Column( "DateTime",
Numeric,
"Continuous",
Format( "m/d/y h:m", 19 ),
Input Format( "m/d/y h:m" ),
Set Values(
[3225888000, 3225888900, 3225889800, 3225890700, 3225891600, 3225892500, 3225893400, 3225894300,
3225895200, 3225896100, 3225897000, 3225897900, 3225898800, 3225899700, 3225900600, 3225901500,
3225902400, 3225903300, 3225904200, 3225905100, 3225906000, 3225906900, 3225907800, 3225908700,
3225909600, 3225910500, 3225911400, 3225912300, 3225913200, 3225914100]
)
),
New Column( "data",
Numeric,
"Continuous",
Format( "Best", Use thousands separator( 0 ), 15 ),
Set Values( [5, 5, 5, 5, 5, ., 5, 5, 5, 5, 5, 5, 5, 5, ., 5, 5, 5, 5, 5, 5, 5, ., ., 5, 5, 5, 5, 5, 5] )
),
New Column( "expected run avg",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [., ., ., ., 5, ., 5, 5, 5, 5, 5, 5, 5, 5, ., 5, 5, 5, 5, 5, 5, 5, ., ., 5, 5, 5, 5, 5, 5] )
),
New Column( "run avg",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ),
Formula(
If( Row() < :Moving Avg Window,
.,
Sum( :data[Index( Row() - (:Moving Avg Window - 1), Row() )] ) / :Moving Avg Window
)
)
)
);欠落データを含む移動平均私はこの事件を詳細には見なかった。しかし、私も言及したかっただけです:
Col移動平均(名前、オプション、)
これは多くの柔軟性を持っているようです。
欠落データを含む移動平均この質問にご注目いただきありがとうございます。 MSの提案は、前後に移動するウィンドウのサイズを定義して指定するので、確かに最もクリーンで実装が簡単な方法です。 私は確かに提供されたすべての例から多くを学びました。 ありがとうございます。
欠落データを含む移動平均以下のリンクで、これについて説明し、それを実現するための高速アルゴリズムをいくつか紹介しました。
https://community.jmp.com/t5/Discussions/Efficient-moving-average-algorithm/td-p/8553
欠落データを含む移動平均Mean()関数は、欠損値を無視します。以下の式は時間窓に固定されていますが、平均値を計算するときに欠損値を含みません。
If(Row() < :Moving Avg Window,
Mean(:data[Index(1, Row())]),
Mean(:data[Index(Row() - (:Moving Avg Window - 1), Row())])
);
欠落データを含む移動平均null値を除いてサブセットを作成できない場合は、以下の式でうまくいくと思います - より良い方法があると確信しています。これはデータのない行にはNULL値を与えますが、ifステートメントを取り除くことで平均を繰り返すことができます。
(Is Missing(:data)、。、rsum = 0; rcount = 0; temprow = 0;(While(rcount <:移動平均ウィンドウ、While(Is Missing(:data [Row() - temprow]))&Row () - temprow> = 1、temprow + = 1); rsum + =:data [Row() - temprow]; temprow + = 1; rcount + = 1); rsum /:移動平均ウィンドウ))
欠落データを含む移動平均これは私があなたが望むものをあなたに与えると信じているスクリプトです。
Names Default To Here( 1 );
dt = New Table( "Untitled 5",
Add Rows( 30 ),
Compress File When Saved( 1 ),
New Table Variable( "Moving Avg Window", 5 ),
New Column( "DateTime",
Numeric,
"Continuous",
Format( "m/d/y h:m", 19 ),
Input Format( "m/d/y h:m" ),
Set Values(
[3225888000, 3225888900, 3225889800, 3225890700, 3225891600, 3225892500, 3225893400,
3225894300, 3225895200, 3225896100, 3225897000, 3225897900, 3225898800, 3225899700,
3225900600, 3225901500, 3225902400, 3225903300, 3225904200, 3225905100, 3225906000,
3225906900, 3225907800, 3225908700, 3225909600, 3225910500, 3225911400, 3225912300,
3225913200, 3225914100]
)
),
New Column( "data",
Numeric,
"Continuous",
Format( "Best", Use thousands separator( 0 ), 15 ),
Set Values(
[5, 5, 5, 5, 5, ., 5, 5, 5, 5, 5, 5, 5, 5, ., 5, 5, 5, 5, 5, 5, 5, ., ., 5, 5, 5, 5,
5, 5]
)
),
New Column( "expected run avg",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values(
[., ., ., ., 5, ., 5, 5, 5, 5, 5, 5, 5, 5, ., 5, 5, 5, 5, 5, 5, 5, ., ., 5, 5, 5, 5,
5, 5]
)
),
New Column( "run avg",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ),
Formula(
If( Row() == 1,
NonMissingRows = dt << get rows where( Is Missing( :data ) == 0 )
);
If( Loc( As List( NonMissingRows ), Row() ) < :Moving Avg Window,
.,
TargetPosition = Loc( As List( NonMissingRows ), Row() );
MatrixofMAW = NonMissingRows[Index(
TargetPosition - (Moving Avg Window - 1),
TargetPosition
)];
Show( Row(), MatrixofMAW );
Sum( :data[MatrixofMAW] ) / :Moving Avg Window;
);
)
)
);