私はデータテーブルのすべての行をカウントする列関数を開発しようとしています。
1) :Xと:Y座標が2ユークリッド距離未満である
&
2) :値は5です
この 5 x 5 のグリッドでは、中央のデータ ポイント (3,3) の :Value が 5 である場合を除き、すべての :Value が 1 に設定されています。
青色のデータポイントは、中央のデータポイントから 2 単位以内離れているため、その範囲内で 1 つのデータポイントが正しくカウントされます。
赤で表示されたデータポイントには、範囲内に :Value = 5 の行がないため、値は 0 としてカウントされます。

色々な方法を試しています。主にFor Each Row()コマンドを試しているのですが、列関数ではうまく動作しないようです。おそらくやり方が間違っているのでしょう。何か良いアイデアはありますか?
数式が必要な場合は少し遅くなることがありますが、As Constant を使うと便利です。Distance()、KDTable()、そして VPTree() などを検討してみてはいかがでしょうか。
これらは最適化されていませんが、As Constant()とKDTable/Distanceの使用方法に関する簡単な例です。
Current Data Table() << New Column("R", Numeric, Ordinal, Formula(
As Constant(
tree = KDTable(Current Data Table()[0, {"X", "Y"}]);
{rows, dist} = tree << K nearest rows(25, 13);
v = rows[Loc(dist <= 2)];
);
If(Contains(v, Row()),
1,
0
);
));
距離を使った例
Current Data Table() << New Column("R", Numeric, Ordinal, Formula(
As Constant(
five_idx = Where(:Value == 5);
m = :X[five_idx] || :Y[five_idx];
);
Sqrt(Distance(Matrix({:X, :Y})`, m)) <= 2;
));
数式が必要ない場合は、これらをより効率的にすることができます