我正在尝试开发一个列函数,该函数将统计数据表中每一行的数量。
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;
));
如果不需要公式,这些可以做得更高效。