こんにちは、みんな。特定のタスクのためにこのJSL関数を作成しましたが、これを行うためのより良い方法があるかどうか疑問に思っていました.
私が欲しいのは、インデックスのベクトルがある場合、ベクトル要素の値が指定されたインデックスの場合は 1 で、それ以外の場合は 0 である指定されたリンクの指標ベクトルを作成する方法です。例えば
[2, 3, 6] --> 長さ 10 の指標ベクトルに変換します。
[0, 1, 1, 0, 0, 0, 1, 0, 0, 0]
ユース ケースは、複数の条件に基づいてデータ テーブル内の行のサブセットを選択するためのものです。条件ごとに、条件を満たす行番号のベクトルを取得し、すべての条件を満たす行を取得したいと考えています。
// Loc Inverse Function
// This function converts a vector of positive integers (locvals) into an
// indicator vector of a specified length, n, with the values
// v[I] = 1 if I is in locvals, and 0 otherwise
// example
// Loc Inverse(6, [1,3])
// returns
// [1, 0, 1, 0, 0, 0]
*/
Loc Inverse = Function( {n, locvals},
v = J( n, 1, 0 );
v[locvals] = 1;
v;
);
したがって、ユースケースでは、たとえば、3 つの条件がある場合、各条件 (v1、v2、v3) を満たすベクトルで行番号を取得するので、これを行います。
dt=current data table();
Loc Inverse = Function( {n, locvals},
v = J( n, 1, 0 );
v[locvals] = 1;
v;
);
// ...
// code to get v1, v2, v3
// ...
rowindicator1=Loc Inverse(n rows(dt), v1);
rowindicator2=Loc Inverse(n rows(dt), v2);
rowindicator3=Loc Inverse(n rows(dt), v3);
meet_all_conditions_indicator = rowindicator1 & rowindicator2 & rowindicator3;
rows_that_meet_all_conditions = Loc(meet_all_conditions_indicator);