各日付の最後の3つの観測値の平均を計算したいデータセットがあり、その値を独自の列に入れて、以下に示すように最後の日付とペアにします。
Names Default To Here( 1 );
// Create an example data table
dt = New Table( "Date",
Add Rows( 30 ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Set Values( [3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600,
3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200,
3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800] )
),
New Column( "Data",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2,4,6,8,10,12,14,16,18,20,2,4,6,8,10,12,14,26,28,30,2,4,6,8,10,12,14,36,38,40] )
),
New Column( "Desired Result",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [.,.,.,.,.,.,.,.,.,18,.,.,.,.,.,.,.,.,.,28,.,.,.,.,.,.,.,.,.,38] )
),
);
平均を計算する要約テーブルを作成してから、元のデータテーブルに平均を挿入することはできますが、よりエレガントでプロセス集約度の低い方法の提案を探しています。これを実現する方法についての提案は、列式として、またはJSL(推奨)を介していただければ幸いです。
Col関数はかなり強力である可能性があるため、ソリューションを少し開くこともできます。 時間があるときに説明を見てください:
- Col Max(Row()、: Date)を使用して、各日付の最後の行を取得します
- 日付の最後の行については、Row()を使用したifステートメントで確認してください
- 平均を使用して、日付の最後の3行の平均を計算します。 Index(Row()-2、Col Max(Row()、: Date)は、行番号の行列を作成します。 そして、with:Data [Index]を使用して、これらの行番号の値を取得できます
数式が部分的に分割されたデータテーブルを添付しました

式を使用したその他のオプション:
If(Row() == Col Max(Row(), :Date),
Mean(:Data[Index(Row() - 2, Col Max(Row(), :Date))])
)
これを行うための式を書く1つの方法があります
If( :Date != :Date[Row() + 1] | Row() == N Rows( Current Data Table() ),
Mean( :Data[Row()], :Data[Row() - 1], :Data[Row() - 2] )
)