Hallo,
Ich habe eine Spalte A (ca. 15.000 Zeilen), die Zahlen und viele Nullwerte enthält (vielleicht 70-80 % null).
Ich möchte eine Spalte B konstruieren, die in Zeile i gleich dem Mittelwert ist von: den * letzten 10 Nicht-Null-Werten von A *
--> das bedeutet, nimm A[Zeile i-1] , A[Zeile i-2], ... und gehe zurück, bis du 10 Nicht-Null-Werte hast (oder wenn du Zeile 1 erreichst, dann nimm eine beliebige Zahl <= 10 von Nicht-Null-Werten, die Sie erhalten)
Ich würde auch gerne zusätzlich zu Mittel, Median und auch Modus machen, aber eine geglättete Version des Modus, wobei:
Ich mache zuerst eine Gaußsche Glättung der 10 Nicht-Null-Werte ... und nehme den Argmax (Modus) dieser Verteilungen.
Danke für alle Gedanken oder Vorschläge!
***
Lösungsideen: Ein Gedanke, den ich hatte, war, weil ich mehrere verschiedene Berechnungen mit den letzten 10 Nicht-Null-Werten durchführen möchte, sollte ich zuerst eine Spalte C konstruieren, deren Einträge Arrays sind, die gleich diesen letzten 10 Nicht-Null-Werten sind ... dann I kann 3 Formeln ausführen, die mit Spalte C arbeiten, um B1 (Mittelwert), B2 (Mittelwert), B3 (geglätteter Modus) zu erzeugen.
Hier sind einige Codefragmente, die sich zum Aufbau dieser Spalte C von Arrays bewegen:
//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