<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Salut à tous,
J'ai un fichier journal de la température à des intervalles inégaux et la durée entre eux.
Je souhaite nettoyer le jeu de données afin d'éviter toute répétition de température et aucun intervalle court entre les mêmes mesures de température.
Pour supprimer les répétitions, j'utilise le code suivant:
Répétitions = dt << obtenir des rangées où ( Décalage ( : Température , 1 ) == : Température ) ;
dt << supprimer des lignes ( répète ) ;
J'utilise pour les sauts courts entre les mêmes températures:
Sauts = dt << obtenir des rangées où ( Et ( Décalage ( : Température , 1 ) == Décalage ( : Température , - 1 ) , : Durée < 2 ) ) ;
dt << supprimer des lignes ( Sauts ) ;
Ceci est fait de manière répétitive, car une fois les sauts nettoyés, il pourrait y avoir de nouvelles répétitions et inversement. Je l'utilise donc dans une boucle for. Je peux toujours le faire de manière excessive (si je fixe un nombre élevé), mais c'est inefficace.
Des suggestions pour améliorer la boucle afin qu'elle s'arrête quand il n'y a pas de répétition de sauts?
Le script global ressemble à ceci:
dt = Nouvelle table ( "Fichier journal" , Ajouter des lignes ( 500 ) ) ;
dt << Nouvelle colonne ( "Température" ,
Définir la propriété ( "Couleurs de valeur" , { 1 = - 13977687 , 2 = - 3780931 , 3 = - 4222943 , 4 = - 13596966 , 5 = - 2211217 } ) ,
Cellule de couleur par valeur
) ;
Pour chaque rangée ( dt : Température = Random Integer ( 5 ) ) ;
dt << Nouvelle colonne ( "Durée" ) ;
Pour chaque rangée ( dt : Durée = Random Integer ( 3 ) ) ;
// supprime les lignes répétitives et les sauts courts
Pour ( je = 1 , je <= 5 , je ++,
Répétitions = dt << obtenir des rangées où ( Décalage ( : Température , 1 ) == : Température ) ;
dt << supprimer des lignes ( répète ) ;
Sauts = dt << obtenir des rangées où ( Et ( Décalage ( : Température , 1 ) == Décalage ( : Température , - 1 ) , : Durée < 2 ) ) ;
dt << supprimer des lignes ( Sauts ) ;
) ;
Oui, ils sont équivalents. La somme renvoie toujours un nombre et JMP considère tous les nombres non nuls comme VRAI. Ainsi, peu importe si le test renvoie 1 ou 37. Les deux sont également vrais.
Thaks @ms,
pourriez-vous expliquer comment jmp lit N Row ( Répétitions ) + N Row ( Sauts ) comme expression de test?
Est-ce équivalent à:
Ou ( N Row ( Répétitions ) , N Row ( Sauts )) > 0
Ron
Vous pouvez essayer une boucle while. La boucle ci-dessous doit s’arrêter lorsque Repeat et Jumps sont des matrices vides.
Sauts = Répétitions = [ 1 ] ;
Tandis que ( N Row ( Répétitions ) + N Row ( Sauts ) ,
Répétitions = dt << obtenir des rangées où ( Décalage ( : Température , 1 ) == : Température ) ;
dt << supprimer des lignes ( répète ) ;
Sauts = dt << obtenir des rangées où ( Et ( Décalage ( : Température , 1 ) == Décalage ( : Température , - 1 ) , : Durée < 2 )) ;
dt << supprimer des lignes ( Sauts ) ;
) ;