누락 된 데이터로 이동 평균일부 구멍이있는 일부 데이터의 이동 평균을 계산하려고합니다. 나는 누락 된 데이터 만 포함하고 누락 된 데이터가없는 행에 대한 결과 만 계산하는 이동 평균을 계산하는 방법을 알아낼 수 없습니다. 어떤 제안이라도 인정 될 것입니다.
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 문을 제거하여 평균을 반복 할 수 있습니다.
While (rcount <: 평균 이동 창, While (누락 된 위치 (: data [행 () - temprow]) 및 Row (누락 된 (: 데이터),., rsum = 0, rcount = 0, temprow = 0; (temprow + = 1, rcount + = 1); rsum / : 이동 평균 창))) - rsum + = : data [Row () - temprow]
재 : 누락 된 데이터로 평균 이동여기 내가 원한 것을 줄 것이라고 믿는 스크립트가있다.
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;
);
)
)
);