Bonjour,
J'ai une colonne A (environ 15 000 lignes) qui contient des nombres et de nombreuses valeurs nulles (peut-être 70 à 80 % nulles).
Je voudrais construire une colonne B qui, à la ligne i, est égale à la moyenne de : les * 10 dernières valeurs non nulles de A *
--> cela signifie prendre A[row i-1] , A[row i-2], ... et revenir en arrière jusqu'à ce que vous ayez 10 valeurs non nulles (ou si vous atteignez la ligne 1, prenez n'importe quel nombre <= 10 de valeurs non nulles que vous obtenez)
Je voudrais aussi faire en plus de signifier, une médiane et aussi un mode, mais une version lissée du mode où :
Je fais d'abord un lissage gaussien des 10 valeurs non nulles ... et prends l'argmax (mode) de ces distributions.
Merci pour toute idée ou suggestion !
***
Idées de solutions : une pensée que j'ai eue était parce que je veux faire plusieurs calculs différents avec les 10 dernières valeurs non nulles, je devrais d'abord construire une colonne C dont les entrées sont des tableaux égaux à ces 10 dernières valeurs non nulles ... puis je peut faire 3 formules qui opèrent sur la colonne C pour produire B1 (moyenne), B2 (médiale), B3 (mode lissé).
Voici quelques fragments de code évoluant vers la construction de cette colonne C de tableaux :
//step 1 grab the last say 50 entries (some fixed amount that will likely have 10 non-nulls)
For Each Row( dt_join,
to = Row();
If( to - 50 < 0,
from = 1,
from = to - 50); // Quantile( 0.5,
values = :away_1g_pull_seconds[Index( From, To )] < 50, Break());
);
//step 2 convert array to list, drop nulls, convert list of first 10 entries back to array ...
//I don't know how to assign this to a row of C
num_lag = 10;
values = dt_join:A[Index( From, To )] ;
MyList = Remove(as list(values)[1], as list(Loc(as list(values)[1], .)) ); //convert array to list and remove nulls
Mat = Number Col Box("", MyList[1:10]) << get as matrix; //hack convert to array