Supprimer les lignes en double à l'aide de l'horodatageBonjour,
J'ai un exemple de tableau de données joint 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 situés dans les 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 aider comment cela peut être réalisé dans JSL?
Merci!
@txnelson
AnalytiqueTableau de donnéesScriptles fenêtresRe: 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++;
);
Re: Supprimer les lignes en double à l'aide de l'horodatagesalut @psundar6 ,
@txnelson fournit une très bonne solution.
Une approche alternative utilisant un tri de table et une formule de colonne pourrait être effectué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'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 qu'il n'attrape pas quelques entrées en double pour une raison quelconque.
Merci.
Re: Supprimer les lignes en double à l'aide de l'horodatageCela fonctionne, merci !