Ich habe einen Datensatz, in dem ich den Mittelwert der letzten 3 Beobachtungen für jedes Datum berechnen möchte und diesen Wert in einer eigenen Spalte und gepaart mit dem letzten Datum wie unten gezeigt haben möchte.
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 dann den Mittelwert wieder in die ursprüngliche Datentabelle einfügen, aber ich suche nach einem Vorschlag für eine elegantere und weniger prozessintensive Methode.Vorschläge, wie dies erreicht werden kann, sind willkommen, entweder als Spaltenformel oder über JSL (bevorzugt).
Danke für den Vorschlag, vor allem für einen, um den ich mich leicht drehen konnte.Ich muss mich mehr mit dem Vorschlag von jthi beschäftigen, da die Lösung für mich nicht so intuitiv ist wie Ihre.
Ich kann meine Lösung auch ein wenig öffnen, da Col-Funktionen ziemlich mächtig 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 zu erhalten
- Überprüfen Sie mit der if-Anweisung mit Row() für die letzte Zeile für das Datum
- Verwenden Sie Mittel, 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

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] )
)