Ich habe einen Datensatz, in dem ich den Mittelwert der letzten drei Beobachtungen für jedes Datum berechnen möchte. Dieser Wert soll in einer eigenen Spalte stehen und mit dem letzten Datum gepaart werden, wie unten gezeigt.
Names Default To Here( 1 );
// Create an example data table
dt = New Table( "Date",
Add Rows( 30 ),
New Column( "Date",
Numeric,
"Continuous",
Format( "m/d/y", 10 ),
Set Values( [3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600, 3713817600,
3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200, 3715027200,
3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800, 3716236800] )
),
New Column( "Data",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [2,4,6,8,10,12,14,16,18,20,2,4,6,8,10,12,14,26,28,30,2,4,6,8,10,12,14,36,38,40] )
),
New Column( "Desired Result",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [.,.,.,.,.,.,.,.,.,18,.,.,.,.,.,.,.,.,.,28,.,.,.,.,.,.,.,.,.,38] )
),
);
Ich kann zwar eine Übersichtstabelle erstellen, die den Mittelwert berechnet, und den Mittelwert dann wieder in die ursprüngliche Datentabelle einfügen, ich suche jedoch nach einem Vorschlag für eine elegantere und weniger prozessintensive Methode.Vorschläge, wie dies erreicht werden kann, wären willkommen, entweder als Spaltenformel oder über JSL (bevorzugt).
Ich kann meine Lösung auch etwas öffnen, da Col-Funktionen ziemlich leistungsfähig sein können. Schauen Sie sich die Erklärung an, wenn Sie Zeit haben:
- Verwenden Sie Col Max(Row(), :Date), um die letzte Zeile für jedes Datum abzurufen
- Überprüfen Sie mit der if-Anweisung mit Row() die letzte Zeile für das Datum
- Verwenden Sie „Mittelwert“, um den Mittelwert der letzten drei Zeilen für ein Datum zu berechnen. Index(Row() - 2, Col Max(Row(), :Date) erstellt eine Matrix von Zeilennummern. Und dann können wir mit:Data[Index] Werte für diese Zeilennummern erhalten
Ich habe eine Datentabelle angehängt, in der die Formel in Teile aufgeteilt ist

Vielen Dank für den Vorschlag, insbesondere für einen, den ich leicht verstehen könnte.Ich muss mich näher mit dem Vorschlag von jthi befassen, da die Lösung für mich nicht so intuitiv ist wie Ihre.
Andere Option mit einer Formel:
If(Row() == Col Max(Row(), :Date),
Mean(:Data[Index(Row() - 2, Col Max(Row(), :Date))])
)
Hier ist eine Möglichkeit, die Formel dafür zu schreiben
If( :Date != :Date[Row() + 1] | Row() == N Rows( Current Data Table() ),
Mean( :Data[Row()], :Data[Row() - 1], :Data[Row() - 2] )
)