我正在嘗試開發一個列函數,該函數將統計資料表中每一行的數量。
1) X 和 Y 座標之間的歐氏距離小於 2。
&
2) 該值 = 5
在這個 5x5 的網格中,每個 :Value 都被設定為 1,除了中心資料點 (3,3) 的 :Value = 5。
藍色的資料點與中心資料點的距離小於等於 2 個單位,因此在其範圍內正確計數為 1 個資料點。
紅色資料點中沒有任何行的 :Value = 5 在範圍內,因此計數值為零。

我嘗試過不同的方法來實現這個功能。主要是嘗試使用 For Each Row() 命令,但它似乎在列函數中效果不佳。可能是我的方法不對。有什麼建議嗎?
如果需要使用公式,速度可能會有點慢,但使用 As Constant 函數可以有所幫助。您可以了解 Distance()、KDTable() 和 VPTree() 函數。
這些範例並非最優解,但它們是一些如何使用 As Constant() 和 KDTable/Discent 的簡單範例。
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;
));
如果不需要公式,這些可以做得更有效率。