Tri de la table de données JMP et suppression de lignes dans JMP Script<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut:
Je suis un débutant avec JMP. Je souhaite trier et formater une table de données en fonction des conditions sur les deux premières colonnes. La première colonne est une chaîne de texte ("LaserID" ) et la deuxième colonne est l'heure à laquelle les données sont prises ("time"). Mon objectif est de dériver une autre table avec exactement le même nombre de colonnes que la table d'origine afin qu'il n'y ait qu'une seule ligne de données d'un "LaserID" particulier (c'est-à-dire sans répétition). L'élimination de plusieurs lignes avec le même "LaserID" sera basée sur le moment où les données sont prises ("heure").
En d'autres termes, la nouvelle table consistera en une ligne avec un "LaserID" unique avec des données prises au dernier moment.
Je joins le tableau original et final que je souhaite réaliser. Toute aide à la rédaction d'un script pour cette tâche sera appréciée.
Re : Trier la table de données JMP et supprimer des lignes dans JMP ScriptBonjour David, j'utilise également votre script pour éliminer les doublons, mais j'ai une question : et si ma colonne (équivalente à colonne "LaserID" dans l'exemple) est numérique et continu ? d'une manière ou d'une autre, le script ne fonctionnerait pas dans mon cas .... Si je modifie les propriétés de la colonne pour en faire un "caractère", le script fonctionne.
merci.
Re : Trier la table de données JMP et supprimer des lignes dans JMP ScriptVous avez reçu une paire de réponses de script. Si vous souhaitez le faire de manière interactive, essayez ces étapes.
Trier le tableau par ID laser et Temps .

Créez ensuite une nouvelle colonne avec une formule pour sélectionner les lignes où ID laser dans la ligne actuelle ne correspond pas à la ID laser dans la rangée suivante. Comme le tableau est trié par ID laser et Temps vous obtiendrez la dernière ligne de chaque série LaserID.
L'astuce ici est d'utiliser une colonne avec un type de données de État de la ligne et le État sélectionné fonction d'état dans la formule.
Choisir Cols -> Nouvelle colonne... et définissez le type de données sur État de la ligne .

Ajoutez ensuite un Formule.

Pour la formule, commencez par État de la ligne -> État sélectionné .

Ensuite, placez la comparaison dans la fonction Selected State(). Cette comparaison utilise le Fonction décalage() avec un argument -1 pour comparer avec la valeur de ID laser dans la rangée suivante.

Il ne vous reste plus qu'à copier les états de ligne de votre nouvelle colonne dans la zone d'état de ligne active en cliquant sur l'icône étoile devant le nom de la colonne.

Maintenant, vous pouvez utiliser Tableaux->Sous-ensemble pour créer un sous-ensemble des lignes sélectionnées.

J'espère que ça aide!
-Jeff
Re : Trier la table de données JMP et supprimer des lignes dans JMP ScriptVoici une approche alternative qui utilise tabuler avec max, puis mettre à jour :
dt1 = Tableau de données ( "Initial" ) ;
onglet1 = dt1 << Tabuler (
Afficher le panneau de configuration ( 0 ) ,
Ajouter un tableau (
Tableau des colonnes ( Colonnes d'analyse ( : temps ) , Statistiques ( Max ) ) ,
Tableau de lignes ( Groupement de colonnes ( : ID laser ) )
) , invisible
) ;
dt2 = onglet1 << Transformer en tableau de données ;
onglet1 << Fermer la fenêtre () ;
dt2 << Mise à jour (
Avec ( dt1 ) ,
Faire correspondre les colonnes ( : ID laser = : ID laser , : Nom ( "Max(temps)" ) = : temps ) ,
Ajouter des colonnes à partir du tableau de mise à jour (
: FRP ,
: Nom ( "Puissance(W)" ) ,
: Nom ( "Pmon(W)" ) ,
: PRF2 ,
: Nom ( "Puissance2(W)" ) ,
: Nom ( "Pmon2(W)" )
)
) ;
Re : Trier la table de données JMP et supprimer des lignes dans JMP ScriptQuelque chose comme ça devrait le faire:
Obtenir la dernière ligne = Fonction ({ dt , IDENTIFIANT } , { Locale par défaut } ,
// cela peut être beaucoup plus simple si nous supposons l'ordre datetime !
// n'obtient que les lignes correspondant à l'ID laser spécifié
lstRows = dt << Obtenir des lignes où ( : Identification laser == IDENTIFIANT ) ;
// récupère les heures correspondantes sous forme de liste
lstTimes = Colonne ( dt , "Temps" )[ lstRows ] ;
// localise le temps maximum
lieu = Loc Max ( lstTimes ) ;
// renvoie la ligne contenant le temps maximum
lstRows [ lieu ]
) ;
//table de données source
dt = Tableau de données ( "Initial" ) ;
// obtenir la liste des valeurs uniques pour Laser ID
Résumer ( lstID = Par ( : Identification laser )) ;
// crée une table finale vide
nouveauDt = dt << Sous-ensemble ( Copier des formules ( 0 )) ;
nouveauDt << Sélectionner toutes les lignes ;
nouveauDt << Supprimer des lignes ;
nouveauDt << Définir le nom ( "Final" ) ;
// crée une ligne pour chaque résultat
Colonne ( nouveauDt , "Identification laser" ) << Définir les valeurs ( lstID ) ;
// parcourez chaque ID pour trouver la ligne avec la dernière date
Pour ( je = 1 , je <= NIéléments ( lstID ) , je ++,
identifiant actuel = lstID [ je ] ;
r = Obtenir la dernière ligne ( dt , identifiant actuel ) ;
montrer ( r ) ;
// place les valeurs de la ligne r dans la nouvelle table de données
Pour ( c = 1 , c <= sous-officiers ( dt ) , c ++,
Colonne ( nouveauDt , c )[ je ] = Colonne ( dt , c )[ r ]
)
) ;