Entfernen Sie doppelte Zeilen mithilfe des ZeitstempelsHallo,
Ich habe eine Beispieldatentabelle angehängt, in der ich doppelte Zeilen innerhalb des Datensatzes mithilfe der TimeStamp- und Tool-Spalten entfernen möchte.
Kriterien für die Vervielfältigung:
Zeitstempel, die innerhalb von 6 Minuten auf demselben Tool liegen, werden als Duplikate betrachtet und diese Zeilen müssen entfernt werden.
Kann jemand helfen, wie dies in JSL erreicht werden kann?
Danke!
@txnelson
Erweiterte statistische ModellierungAutomatisierung und SkripterstellungVerbraucher- und MarktforschungMassenanpassungWindowsBetreff: Doppelte Zeilen mithilfe des Zeitstempels entfernenDanke @psundar6 mich wissen zu lassen. Es gab einen Tippfehler, jetzt habe ich das Skript bearbeitet.
Betreff: Doppelte Zeilen mithilfe des Zeitstempels entfernenDas funktioniert, Danke!
Betreff: Doppelte Zeilen mithilfe des Zeitstempels entfernenHallo Ron,
Ich habe Ihre Lösung ausprobiert und sehe ein Problem mit dem Ergebnis.
Ich habe das Ergebnis der Ausführung Ihres Codes angehängt. Es scheint, als ob aus irgendeinem Grund ein paar doppelte Einträge nicht erkannt werden.
Danke.
Betreff: Doppelte Zeilen mithilfe des Zeitstempels entfernenHallo @psundar6 ,
@txnelson bietet eine sehr gute Lösung.
Ein alternativer Ansatz mit Tabellensortierung und Spaltenformel könnte interaktiv oder durch Skripterstellung wie folgt erfolgen:
dt = current data table();
dt << Sort(
By( :TimeStamp, :Tool ),
Replace Table,
Order( Ascending, Ascending )
);
dt << New Column( "to delete",
Numeric,
"Ordinal",
Format( "Best", 12 ),
Formula( If( :Tool == Lag( :Tool, 1 ) & Date Difference( Lag( :TimeStamp, 1 ), :TimeStamp, "Minute" ) < 6, 1, 0 ), eval formula )
);
dt:to delete << suppress eval(true);
dt<< delete rows (dt<< get rows where (:to delete == 1));
Lassen Sie uns wissen, ob es für Sie funktioniert.
Betreff: Doppelte Zeilen mithilfe des Zeitstempels entfernenIch glaube, dies wird Ihnen ein Beispiel dafür geben, wie Sie mit Ihrem Problem fortfahren können
Names Default To Here( 1 );
dt = Current Data Table();
// Loop through the data table deleting all duplicate rows
i = 1;
While( i <= N Rows( dt ),
// Find the upper and lower bounds to match on
lower = :timeStamp[i] - In Minutes( 6 );
upper = :timeStamp[i] + In Minutes( 6 );
// Find the rows that match
theRows = dt << get rows where( :timeStamp > lower & :timeStamp < upper );
// Remove the current row from the list. We do not want to delete it
Try( theRows[1] = [] );
// Delete the remaining rows
Try( dt << delete rows( theRows ) );
// Increment the row to work on
i++;
);