Berechnen Sie die Spaltendifferenz für andere Spaltenebenen, bei denen die Verzögerung variiertIch habe eine Spalte :EVENT (Zeichen-Nominal) mit verschiedenen Werten. Außerdem eine weitere Spalte :datetime (numerisch-kontinuierlich). Ich habe die Spalte :datetime aufsteigend sortiert. Ich möchte eine weitere Spalte haben, die berechnet, wann immer ein „CONNECT“-Ereignis auftritt, wie groß die Zeitdifferenz zwischen diesem und dem letzten „DISCONNECT“-Ereignis ist. Das Problem ist, dass die Verzögerung zwischen einem CONNECT und einem vorherigen DISCONNECT variieren kann (siehe Foto unten), und ich würde es auch vorziehen, dieses hohe Tabellenformat beizubehalten. Eine Lösung für aufsteigend sortiertes Datum und Uhrzeit wäre wünschenswert, aber auch eine nicht sortierte Lösung wäre von Vorteil.

Grundlegende Datenanalyse und ModellierungDatenexploration und -visualisierungBetreff: Spaltendifferenz für andere Spaltenebenen berechnen, bei denen die Verzögerung variiertSie können beispielsweise eine Variable in der Formel verwenden, um den Wert der letzten Trennung zu speichern
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
dt << New Column("Dif", Numeric, Continuous, Formula(
If(Row() == 1,
last_disc = .;
retval = .;
);
If(:E == "Disc",
last_disc = :T;
retval = .;
, :E == "Con",
retval = :T - last_disc
,
retval = .;
);
retval;
));

Betreff: Spaltendifferenz für andere Spaltenebenen berechnen, bei denen die Verzögerung variiertDieser Ansatz hat super funktioniert, danke!
Betreff: Spaltendifferenz für andere Spaltenebenen berechnen, bei denen die Verzögerung variiertSie können auch Matrizen verwenden
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
events = :E << get values;
times = :T << get values;
discs = Loc(events, "Disc");
cons = Loc(events, "Con");
difs = J(1, N Rows(dt), .);
difs[cons] = times[cons] - times[discs];
dt << new column("difs", numeric, continuous, values(difs));
Dies erfordert zwar eine ganze Reihe von Annahmen, kann aber für alle möglichen Randfälle robuster gemacht werden (Loc Sorted kann für so etwas hilfreich sein, manchmal sogar KDTable/VPTree).
Betreff: Spaltendifferenz für andere Spaltenebenen berechnen, bei denen die Verzögerung variiertUm das Ganze etwas komplizierter zu machen: Es gibt Zeiten, in denen ein CONNECT-Ereignis einige Male auftreten kann, bevor ein DISCONNECT-Ereignis auftritt. In diesem Fall möchte ich, dass die Differenz nur für das erste CONNECT-Ereignis berechnet wird, das nach einem DISCONNECT-Ereignis auftritt. Gibt es eine kleine Änderung am Skript, die dies berücksichtigen kann? Nochmals vielen Dank für Ihre Hilfe.
Betreff: Spaltendifferenz für andere Spaltenebenen berechnen, bei denen die Verzögerung variiertHier ist eine Änderung am @jthi -Code, die dies behandeln sollte.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
dt << New Column("Dif", Numeric, Continuous, Formula(
If(Row() == 1,
last_disc = .;
retval = .;
);
If(:E == "Disc",
last_disc = :T;
retval = .;
firstCon = .;
, :E == "Con",
If(ismissing(firstcon), firstcon=:t);
retval = firstcon - last_disc
,
retval = .;
);
retval;
));
Ich schlage vor, dass Sie sich die Zeit nehmen, den Scripting Guide zu lesen, der unter JMP Help verfügbar ist. Nehmen Sie sich auch die Zeit, den Code zu studieren, der von den antwortenden Mitgliedern des Diskussionsforums bereitgestellt wurde. Die Änderungen an Jarmos Skript erforderten keine neuen Skriptkenntnisse. Es war lediglich eine zusätzliche Logik erforderlich, die dem Skriptfluss hinzugefügt wurde. Ziel eines Benutzers sollte es sein, eigene Verbesserungen an den Skripten vornehmen zu können.