J'essaie de développer une fonction de colonne qui comptera chaque ligne de mon tableau de données où
1) Les coordonnées X et Y sont à moins de 2 distances euclidiennes.
&
2) La valeur est égale à 5
Dans cette grille 5 par 5, chaque :Value est défini sur 1, sauf pour le point de données central (3,3) qui a :Value = 5.
Les points de données en bleu sont situés à moins de 2 unités du point de données central et comptent donc correctement 1 point de données dans leur plage.
Les points de données en rouge ne comportent aucune ligne avec :Value = 5 dans la plage et comptent donc une valeur de zéro.

J'ai testé différentes méthodes pour y parvenir. J'ai surtout essayé la fonction For Each Row(), mais elle ne semble pas bien fonctionner avec une fonction de colonne. Je m'y prends probablement mal. Auriez-vous une idée ?
Si vous avez besoin d'une formule, le traitement peut être un peu lent, mais l'utilisation de la fonction `As Constant` peut s'avérer utile. Vous pourriez examiner les fonctions `Distance()`, `KDTable()` et éventuellement `VPTree()`.
Ces exemples ne sont pas optimisés, mais ils illustrent simplement comment utiliser As Constant() et 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 exemple utilisant la distance
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;
));
Si vous n'avez pas besoin de formule, ces méthodes peuvent être rendues plus efficaces.