Sto cercando di sviluppare una funzione di colonna che conterà ogni riga della mia tabella dati in cui
1) Le coordinate :X e :Y sono a meno di 2 distanze euclidee
e
2) Il valore è = 5
In questa griglia 5 per 5 ogni :Value è impostato su 1, eccetto per il punto dati centrale (3,3) che ha :Value = 5.
I punti dati in blu sono <= 2 unità di distanza dal punto dati centrale e quindi contano correttamente 1 punto dati nel loro intervallo.
I punti dati in rosso non hanno righe con :Value = 5 nell'intervallo e quindi contano un valore pari a zero.

Ho sperimentato diversi metodi per farlo. Ho provato soprattutto il comando "For Each Row()", ma non sembra funzionare bene in una funzione colonna. Probabilmente sto sbagliando. Avete qualche idea?
Se hai bisogno di una formula, la procedura potrebbe risultare un po' lenta, ma usare As Constant può aiutarti. Potresti dare un'occhiata a Distance(), KDTable() e magari VPTree().
Questi non sono ottimizzati ma sono alcuni semplici esempi su come puoi usare As Constant() e 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
);
));
Un esempio che utilizza la distanza
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;
));
Se non hai bisogno di formule, queste possono essere rese più efficienti