Comment sélectionner les trois valeurs de cellule les plus élevées dans chaque colonne ?Pour chaque colonne contenant un mot, dites "Prédiction", je souhaite extraire les 3 premières valeurs de cellule supérieures à 5 ou supérieures à 4,5 (si j'obtiens 3 nombres supérieurs à 5, je ne veux aucun nombre supérieur à 4,5) dans une liste. De plus, choisissez celui qui est le plus éloigné de 5 et masquez la valeur de cellule correspondante dans son tableau brut. Par exemple, dans cet exemple de tableau ci-dessous :
Dans la colonne Prédiction B, je souhaite stocker 6,6, 5,3 et 5. Et masquez la cellule adjacente à l'écrou de prédiction B dans la colonne B, c'est-à-dire la valeur de cellule 65.
Mon code sélectionne les colonnes contenant la chaîne "Prediction".
dt = Current Data Table();
a = "Prediction";
col = dt << get column names( string );
nc = N Items( col );
For( i = 1, i <= nc, i++,
If( Contains( col[i], a ), )
);
Comment puis-je choisir les 3 premières cellules supérieures à 5 ou 4,5 ? Merci beaucoup à la communauté JMP d'avoir été si rapide.
Re : 3 premières valeurs de cellule dans chaque colonne@txnelson Je pourrais le faire en utilisant regex : match = regex(colstrings, "[{,]\s*([^{,}]*Prediction[^{,}]*)[,}]", "\1");
Re : 3 premières valeurs de cellule dans chaque colonneUtilisez la fonction Loc() au lieu de la fonction Contient() pour spécifier des chaînes spécifiques.
Re : 3 premières valeurs de cellule dans chaque colonneExiste-t-il également un moyen de faire correspondre des colonnes telles que B et Prédiction B ? Merci
Re : 3 premières valeurs de cellule dans chaque colonneD'accord, merci de m'avoir aidé.@txnelson @uday_guntupalli
Re : 3 premières valeurs de cellule dans chaque colonneIl n'existe pas de moyen direct de retirer une valeur de cellule une fois qu'elle a été définie sur Manquante.C'est la raison pour laquelle @dale_lehman suggéré d'utiliser de nouvelles colonnes et @uday_guntupalli suggère de créer un nouveau sous-ensemble de données, puis de modifier le sous-ensemble.
Re : 3 premières valeurs de cellule dans chaque colonne@amy ,
Vous pouvez toujours créer des sous-ensembles de tableaux, plutôt que d'essayer d'inclure des cellules individuelles.
Re : 3 premières valeurs de cellule dans chaque colonne@amy ,
dt = Current Data Table();
SearchTerm = "Prediction";
ColNames = dt << Get Column Names("String");
DesRowsList = {};
for(i = 1, i <= N Cols(dt), i++,
If(Contains(ColNames[i],SearchTerm),
SR = dt << Select Where(As Column(dt,ColNames[i]) > 4.5) << Get Selected Rows;
Insert Into(DesRowsList,SR);
dt << Clear Select;
);
);Cela devrait vous aider à regrouper les lignes qui répondent à votre condition dans une seule liste. À partir de là, vous devriez pouvoir extraire le top 3 dans chaque cas. Pour répondre à votre question, je ne suis pas au courant d'exclure uniquement des cellules
Re : 3 premières valeurs de cellule dans chaque colonne@txnelson Eh bien, après avoir défini la valeur d'une cellule sur la valeur manquante/cacher/exclure la valeur d'une cellule, je voudrais exécuter certains modèles sur la table de données, puis décider de le conserver ou d'inclure à nouveau la valeur dans la cellule. Est-ce possible?
Re : 3 premières valeurs de cellule dans chaque colonneDans JMP, vous n'"excluez" pas une cellule individuelle, vous définissez plutôt la valeur de la cellule sur une "valeur manquante".Le symbole de la valeur manquante est "."
Si la colonne est d'un type de données caractère, vous définissez la valeur sur ""
Re : 3 premières valeurs de cellule dans chaque colonneJe ne veux même pas exclure une ligne entière. Je veux exclure uniquement les cellules. Par exemple, dans le tableau que j'ai publié, je veux pouvoir exclure la cellule de la colonne "B" qui est adjacente à la cellule qui a la valeur 6,6 dans la colonne "Prédiction B". J'ai toujours du mal à comprendre comment je peux utiliser regex pour faire correspondre de telles chaînes. J'ai fait 2 listes, une qui contient des noms de colonnes contenant le mot "Prédiction" et une autre qui n'en contient pas. J'apprécierais si vous pouviez également m'indiquer toute fonction qui, selon vous, fonctionnerait le mieux avec ce type de tables. Je viens de commencer à travailler avec JSL et j'ai encore du mal avec ça. Merci d'avance pour l'aide.@uday_guntupalli
PS : Cela signifie-t-il qu'il est impossible d'exclure une seule cellule d'une colonne dans JSL ?
Re : 3 premières valeurs de cellule dans chaque colonne@amy ,
Cherchez-vous à exclure la ligne entière ou la ligne de cette colonne uniquement ? La raison pour laquelle je demande, je suis à peu près sûr que vous pouvez exclure toute la ligne en utilisant:
dt << Exclude ;
Cependant, si vous souhaitez simplement exclure la ligne d'une colonne, je ne pense pas que ce soit possible. Alors pourquoi n'essayez-vous pas de stocker les numéros de ligne dans une variable, puis d'exclure ces lignes ?
Re : 3 premières valeurs de cellule dans chaque colonneC'est un moyen de vérifier les données qui doivent être supprimées de mon analyse, je dois donc procéder de la même manière. Merci beaucoup pour toute l'aide que j'apprécie vraiment @dale_lehman
Re : 3 premières valeurs de cellule dans chaque colonneJe ne fais pas beaucoup de scripts donc je vais laisser ça à quelqu'un d'autre pour vous aider.Je dirai seulement que je ne comprends pas vraiment la raison de vouloir exclure des lignes après avoir effectué ces opérations - il semblerait préférable de créer de nouvelles colonnes avec ces lignes exclues ou définies comme manquantes.Je pense que ce script serait relativement simple et je n'aime pas l'idée d'écraser les données d'origine (si c'est ce que vous suggérez).
Re : 3 premières valeurs de cellule dans chaque colonne@dale_lehman Merci pour l'aide. J'ai mis à jour mon script pour sélectionner la valeur maximale de chaque colonne et l'ai enregistrée dans la variable "val". Savez-vous comment je peux exclure la cellule avec le nombre maximum dans la première colonne, effectuer certaines opérations puis exclure la cellule avec le nombre maximum dans la deuxième colonne et ainsi de suite ?
dt = Current Data Table();
col = dt << get column names( string );
nc = N Items( col );
For( i = 1, i <= nc, i++,
Col1 = Column( dt, i );
If( Contains( col[i], "Prediction" ),
Show( col[i] );
val = Abs( Col Max( Col1 ) );
Show( val );
MaxRow = dt << get rows where( As Column( Col1 ) == Abs( Col Max( Col1 ) ) );
);
);
Re : 3 premières valeurs de cellule dans chaque colonneJ'ai joint votre exemple avec une tentative d'utilisation des prédictions de la colonne B comme vous l'avez spécifié.Je ne suis pas sûr que cela fasse exactement ce que vous voulez, mais je pense que c'est proche.
Re : 3 premières valeurs de cellule dans chaque colonne@dale_lehman eh bien, je n'ai pas trouvé grand-chose sur la façon dont je peux utiliser la fonction de classement des colonnes. Je peux extraire une valeur maximale mais je n'arrive toujours pas à comprendre comment je peux aller de l'avant avec le top 3.
Re : 3 premières valeurs de cellule dans chaque colonneLa fonction de classement des colonnes (et certaines instructions IF) pourraient faire l'affaire.