Exclure les colonnes sélectionnéesBonjour,
J'obtiens une liste variable de colonnes à partir d'une source et je sélectionne ces colonnes dans ma table de données. La table de données contient de nombreuses autres colonnes, mais je souhaite masquer/exclure les colonnes qui ne figurent pas dans la liste qui m'a été fournie pendant que mon script est en cours d'exécution et effectue une analyse...
Je peux sélectionner toutes les colonnes dont je n'ai pas besoin par la ligne ci-dessous :
dt <
Étape suivante : excluez ces colonnes sélectionnées. Comment je fais ça?
D'après le livre de scripts, je peux voir colonne("X") << exclure(1) exclurait la colonne portant le nom X, mais existe-t-il une méthode pour exclure les colonnes déjà sélectionnées ?
Merci.
Re : Exclure les colonnes sélectionnéesEn effet, les tableaux associatifs enregistreront la paire clé-valeur et, très probablement, lorsque vous utilisez Select Columns directement avec un tableau associatif, il ne sait pas vraiment quoi faire. Habituellement, il ne devrait rien sélectionner, puis l'inverser sélectionnerait toutes les colonnes (il pourrait y avoir des cas où le tableau associatif serait évalué à 1 afin de sélectionner la première colonne).
Pour extraire les clés du tableau associatif, vous pouvez utiliser << get keys.
Names Default To Here(1);
cols_list = {"Col A", "Col B"};
cols_aa = Associative Array({"Col A", "Col B"});
Show(cols_list);
Show(cols_aa);
Show(cols_aa << get keys);
Vous pouvez en savoir plus sur les tableaux associatifs sur la page d'aide de JMP. Guide de script > Structures de données > Tableaux associatifs . Dans ce cas, j'aurais pu les utiliser en raison de leurs opérations définies
Re : Exclure les colonnes sélectionnéesMerci pour ta réponse, jthi!C'était rapide!
Je viens de voir ta réponse. J'ai essayé différentes choses et j'ai trouvé une solution très simple à 2 lignes.
cols = {"Col A", "Col B"};
dt << Select Columns(cols) << Invert Column Selection;Je n'ai jamais vu de tableaux associatifs utilisés, et lorsque j'ai essayé d'en utiliser un à la place de ce que j'ai actuellement pour col, Select Columns a sélectionné une colonne qui n'était pas dans les colonnes, mais qui n'était que 1 de la sélection inversée. Étrange.Savez-vous pourquoi cela pourrait être le cas ?
cols = Associative Array({"Col A", "Col B"});
dt << Select Columns(cols) << Invert Column Selection;Re : Exclure les colonnes sélectionnéesVous devez utiliser N Items(col_names) au lieu de N Items(dt) dans la boucle for.
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = {"age", "sex", "weight"};
for( i = 1, i <= N Items(col_names), i++,
Column( dt, col_names[i] ) << set selected;
);
dt << Invert Column Selection;
Vous pouvez également simplifier le code en utilisant Select Columns
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = {"age", "sex", "weight"};
wait(1); // for demo purposes
dt << Select Columns(col_names);
wait(1); // for demo purposes
dt << Invert Column Selection;
Vous pouvez également éviter l'inversion en sélectionnant directement les colonnes correctes, mais c'est probablement plus difficile à comprendre
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = Associative Array({"age", "sex", "weight"});
all_col_names = Associative Array(dt << Get Column Names("String"));
all_col_names << Remove(col_names);
dt << Select Columns(all_col_names << get keys);Re : Exclure les colonnes sélectionnéesDésolé de ressusciter ce fil, mais j'ai la même question et je voulais savoir si cette approche comme celle-ci fonctionnerait et comment l'améliorer :
//List of wanted columns<BR />col_names = (":Col A", ":Col B", etc);
<BR />//Iterates through list and uses the string names to identify and select
for( i = 1, i <= N Items(dt), i++,
Column( dt, col_names[i] ) << set selected
);
dt << Invert Column Selection</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-73693" slang="en-US" mode="NONE">Re : Exclure les colonnes sélectionnées</LINGO-SUB><LINGO-BODY id="lingo-body-73693" slang="en-US" mode="NONE"><P>Merci!!! Je l'ai aussi compris mais c'était un peu plus long. C'est parfait :)</img></P></LINGO-BODY><LINGO-SUB id="lingo-sub-73657" slang="en-US" mode="NONE">Re : Exclure les colonnes sélectionnées</LINGO-SUB><LINGO-BODY id="lingo-body-73657" slang="en-US" mode="NONE"><P>Voici la syntaxe permettant de procéder :</P>
<PRE><CODE class=" language-jsl">Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
Column( dt, 4 ) << set selected( 1 );
Column( dt, 5 ) << set selected( 1 );
selcols = dt << get selected columns;
For( i = 1, i <= N Items( selcols ), i++,
Column( dt, selcols[i] ) << exclude( 1 )
);