ある行から次の行までの遅延 (時系列です) を計算したいデータがありますが、多くのグループのデータがあります。各グループ内で個別にラグを作成したいと考えています。多くの統計関数 (例: Col Mean) には、1 つ以上のグループ別変数を追加するオプションがあります。Lag 関数または Dif 関数には同じ機能がないようです。また、スクリプトのドキュメントにはその方法を示すものが見つかりません。各グループのラグを個別に簡単に計算する方法はありますか?私が現在見つけている唯一の方法は、最初にデータを日付とグループ別に並べ替えてから、IF (グループ) - ラグ (グループ) など、ラグ (グループ) に等しいグループに依存する IF 式を使用することです。ラグ (対象の列)、それ以外の場合は欠落しています。
txnelson が解決策を持っていると思っていたかもしれません。これは私が持っていたものよりもエレガントでもシンプルでもありませんが、データを並べ替える必要がなくなり、かなり柔軟性が高まります。ありがとう。
以下は、行が 2 つのレベルで並べ替えられていない場合でも機能するように見える数式です。 (つまり、日付でソートされています) 数式内の lagList は、Col Moving Average() 関数が最初の出現でも現在の行を返すという問題を処理するためにあります。
If( Row() == 1, lagList = {} );
If( Contains( lagList, :administrative_area_level_1 || :administrative_area_level_2 ),
Col Moving Average(
:deaths,
weighting = 1,
before = 1,
:administrative_area_level_1,
:administrative_area_level_2
) * 2 - :deaths,
Insert Into( lagList, :administrative_area_level_1 || :administrative_area_level_2 )
);

これは非効率でも機能する式です
curLevel1 = :administrative_area_level_1;
curLevel2 = :administrative_area_level_2;
curRow = Row();
Try(
:deaths[Max(
Current Data Table() << get rows where(
:administrative_area_level_1 == curLevel1 & (:administrative_area_level_2 == curLevel2 & Row() < curRow)
)
)]
);
これをより具体的にするために、簡単な例を添付しました。遅延死亡列は私が望むものですが、もっとシンプルに、またはエレガントに実行できるようにしたいと思っています。