Ich habe einige experimentelle Daten, die 10 Minuten lang jede Minute eine Messung durchführen.
Ich möchte dann einen Durchschnitt für eine Teilmenge von Datenpunkten in der Mitte der Menge bilden.
Meine Lösung besteht darin, eine versteckte Spalte (:Range) mit einer Formel zu haben, die die Kriterien enthält (Eingabe über ein modales Fenster) und jede Zeile entweder auf 1 oder 0 setzt, wenn sie in die Berechnung einbezogen werden soll.
Meine Ausgabespalte verwendet dann die Funktion „Col Mean“, um den Durchschnitt der Points of Interest zu ermitteln.
Dieser Teil funktioniert hervorragend, aber ich möchte auch, dass die erste leere Zeile (die nicht in die Berechnung einbezogen wird) den Wert der nächsten Zeile annimmt, was später bei der weiteren Datenmanipulation hilfreich ist. Ich habe die Lag-Funktion wie folgt hinzugefügt.
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 )
)
Das Problem ist, dass die Lag-Funktion nicht funktioniert, wenn ich dies als Skript ausführe. Wenn ich die Formel oben manuell eingebe, funktioniert es einwandfrei, aber das folgende Skript füllt nur Zeilen auf, in denen :Range == 1 ist, obwohl ich sehe, dass die Formel korrekt auf die Spalte angewendet wird.
New Column( "Mean Measurement", Formula(
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 ))))
Gibt es dafür einen Grund und wie kann ich die Spalte dazu zwingen, die Formel neu auszuwerten, damit sie ordnungsgemäß ausgeführt wird?
Beachten Sie, dass die Funktion zum erneuten Ausführen von Formeln anscheinend nichts bewirkt
Warum führt man 10 Messungen im Abstand von 1 Minute durch? Warum verwenden Sie den Mittelwert einiger Beobachtungen in der Mitte des Zeitverlaufs?
Möglicherweise erhalten Sie weitere Informationen, wenn Sie die gesamte Kurve als Antwortwert analysieren. Siehe die Funktionsdaten-Explorer für weitere Ideen. Mit JMP Pro können Sie ein „funktionales DOE“ analysieren.
Die Funktion Lag() arbeitet mit bestimmten Zeilen und ist keine „vektorisierte“ Funktion.In einer Spaltenfunktion ist die Zeile implizit (die Zeile der Tabelle), sodass sie problemlos in der Spaltenformel funktioniert.
Wenn Sie für Ihr Skript die Zeile mit dem Befehl Row()== vor der Verzögerungsfunktionsanweisung angeben, sollte die Verzögerung einen Wert zurückgeben.
Row() = 3;
If( :Range == 1,
Col Mean( :Measurement, :ID, :Range ),
Lag( :Measurement, -1 )
)
Nur um sicherzugehen, dass Sie sich darüber im Klaren sind: Das Verzögerungszahlargument für Lag(:column,
Wenn es eine negative Zahl ist, handelt es sich tatsächlich um „Vorwärtsverzögerung“.In dem oben gezeigten Beispiel würde nach dem Wert in der nächsten Zeile gesucht, nicht in der vorherigen Zeile.