Comment trier les colonnes et supprimer les lignes répétées<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Vous débutez dans les scripts dans JMP et souhaitez filtrer le tableau des erreurs des outils. J'ai un ensemble de données et je souhaite filtrer par date d'alarme, puis supprimer les lignes d'erreurs répétées. Par exemple, si une erreur se produit à 1h00 et qu'elle se répète 4 fois en 1 heure, je souhaite supprimer les répétitions et ne détecter que lorsque l'erreur apparaît pour la première fois.
Mon script est ci-dessous et je souhaite utiliser le script après avoir supprimé les lignes répétées par date d'alarme (décroissante).
dt = ouvert ("SR_Loop_LAM_002_Alarm_Log.csv");
dt << trier (par (:ENTITY), ordre (croissant), remplacer la table (0));
pour (i = nrows (dt), i>0, i--,
if(:ENTITÉ[i-1]==:ENTITÉ & :ALARM_ID[i-1] == :ALARM_ID & différence de date(:ALARM_DATE[i-1], :ALARM_DATE , "heure", "fractionnaire") < 1,
dt << supprimer les lignes (i))
);
dt << sauvegarder ("SR_Loop_LAM_002_Alarm_Log.csv");
fermer (dt, pas de sauvegarde)
Re : Comment trier les colonnes et supprimer les lignes répétéesMerci à tous pour cette excellente réponse ! J'ai modifié mon script et il fonctionne à merveille maintenant.
Re : Comment trier les colonnes et supprimer les lignes répétéesSalut Evan,
Il existe plusieurs façons de contourner ce problème.La suppression des doublons présente un défi spécifique dans la mesure où vous souhaitez supprimer les « doublons » qui se produisent dans l'heure qui suit la même alarme.Cela nécessite une logique de fonction de décalage, qui à son tour nécessite que les données soient correctement ordonnées avant l'exécution.De plus, si vous supprimez une ligne avant l'exécution de la logique suivante, vous pourriez vous retrouver avec des erreurs hors limites en boucle.Une solution de contournement consiste à définir un indicateur pour la suppression des doublons. Cela peut être fait en créant une colonne booléenne ou en utilisant certaines fonctionnalités intégrées.Ci-dessous, j'ai modifié votre code pour utiliser la sélection de lignes comme indicateur.Une fois la logique exécutée pour déterminer si l’alarme est un doublon, toutes les lignes sont supprimées en même temps.Une vitesse supplémentaire est ajoutée en ouvrant la table en mode invisible afin d'éviter les E/S de l'écran.
/* table de données rendue invisible pour accélérer l'exécution */
dt = Ouvrir ( "SR_Loop_LAM_002_Alarm_Log.csv" , invisible ) ;
/* mis à jour pour les tris multiples */
dt << Trier ( Par ( : ENTITÉ , : ALARM_DATE ) , Commande ( Ascendant , Ascendant ) , Remplacer le tableau ( 0 ) ) ;
/* Effacer d'abord la sélection des lignes et des colonnes (juste une bonne habitude de codage) */
dt << Effacer la sélection ;
dt << Effacer la sélection de colonne ;
/* sélectionne les lignes qui répondent aux conditions spécifiées
parce que cela va de bas en haut, la boucle devrait s'arrêter à la ligne 1 (il n'y a pas de ligne 0)
*/
Pour ( je = N lignes ( dt ) , je > 1 , je --,
Si (
: ENTITÉ [ je - 1 ] == : ENTITÉ [ je ] &
: ALARM_ID [ je - 1 ] == : ALARM_ID [ je ] &
Différence de dates ( : ALARM_DATE [ je - 1 ] , : ALARM_DATE [ je ] , "heure" , "fractionnaire" ) < 1 ,
dt << Sélectionner des lignes ( je )
)
) ;
/* supprime les lignes sélectionnées */
dt << Supprimer des lignes ;
/* tri final */
dt << Trier ( Par ( \ : ALARM_DATE ) , Commande ( De descendre ) , Remplacer le tableau ( 0 ) ) ;
dt << sauvegarder ( "SR_Loop_LAM_002_Alarm_Log_cleansed.csv" ) ;
Fermer ( dt , pas de sauvegarde ) ;
Re : Comment trier les colonnes et supprimer les lignes répétéesSalut evanchen870
jetez un oeil à cette discussion du passé, le script est également très rapide et robuste pour la suppression car il utilise "obtenir les lignes où"
Re : Arrêter une boucle
bonne chance!
Re : Comment trier les colonnes et supprimer les lignes répétéesSi vous utilisez la fonction Lag(), vous n'obtiendrez pas d'erreur.
latitude (ENTITÉ ) pointera vers la colonne (ligne) de sauvegarde sous la forme ENTITY[i-1]
Re : Comment trier les colonnes et supprimer les lignes répétéesMerci pour la réponse rapide Ian, mais le script ne fait toujours pas ce que je veux.
Actuellement, j'ai les colonnes ENTITY, ALARM_DATE, ENTITY_TYPE, ALARM_ID et ALARM_DESCRIPTION
1. Je souhaite d'abord que mon script soit trié par ENTITY, ALARM_DATE ou ENTITY_TYPE
2. alors je souhaite utiliser une boucle if pour supprimer les alarmes répétées (par ALARM_DESCRIPTION) dans un délai d'une heure après le décalage horaire de ALARM_DATE
3. enfin, je souhaite trier par ALARM_DATE (décroissant) pour remplacer la table d'origine
Donc, selon vos suggestions, je devrai changer pour (i = nrows (dt), i>1, i--) ?
Re : Comment trier les colonnes et supprimer les lignes répétéesOn dirait que vous y êtes presque. Votre boucle 'for' se termine à la valeur i=1, mais vous indexez i-1=0. Les indices JMP commencent toujours à 1.
Re : Comment trier les colonnes et supprimer les lignes répétéesL'erreur JMP actuelle est "Numéro de ligne non valide lors de l'accès ou de l'évaluation de 'indice', "ENTITY[i-1]"