Supprimer les lignes en double à l'aide de l'horodatageBonjour,
J'ai joint un exemple de tableau de données dans lequel je cherche à supprimer les lignes en double dans l'ensemble de données à l'aide des colonnes TimeStamp, Tool.
Critères de duplication :
Les horodatages qui durent moins de 6 minutes sur le même outil sont considérés comme des doublons et ces lignes doivent être supprimées.
Quelqu'un peut-il m'aider sur la façon dont cela peut être réalisé en JSL ?
Merci!
@txnelson
Modélisation statistique avancéeAutomatisation et scriptsÉtudes de consommation et de marchéPersonnalisation de masseles fenêtresRe : Supprimer les lignes en double à l'aide de l'horodatageMerci @psundar6 pour me l'avoir fait savoir. il y a eu une faute de frappe maintenant j'ai édité le script..
Re : Supprimer les lignes en double à l'aide de l'horodatageCela fonctionne, merci !
Re : Supprimer les lignes en double à l'aide de l'horodatageBonjour Ron,
J'ai essayé votre solution et je vois un problème avec le résultat.
J'ai joint le résultat de l'exécution de votre code. Il semble que quelques entrées en double ne soient pas détectées pour une raison quelconque.
Merci.
Re : Supprimer les lignes en double à l'aide de l'horodatageSalut @psundar6 ,
@txnelson fournit une très bonne solution.
Une approche alternative utilisant le tri par tableau et la formule de colonne pourrait être réalisée de manière interactive ou par script comme suit :
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));
faites-nous savoir si cela fonctionne pour vous.
Re : Supprimer les lignes en double à l'aide de l'horodatageJe pense que cela vous donnera un exemple sur la façon de procéder avec votre problème
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++;
);