Escludi colonne selezionateCiao,
Ottengo un elenco variabile di colonne da una fonte e seleziono queste colonne nella mia tabella di dati. La tabella dei dati ha molte altre colonne, ma voglio nascondere/escludere le colonne che non sono nell'elenco che mi è stato fornito mentre il mio script è in esecuzione e sta facendo delle analisi...
Posso selezionare tutte le colonne di cui non ho bisogno dalla riga seguente:
dt <
Passaggio successivo: escludi queste colonne selezionate. Come lo faccio?
Dal libro di scripting, posso vedere colonna("X") << escludi(1) escluderebbe la colonna con nome X, ma esiste un metodo per escludere colonne già selezionate?
Grazie.
Re: Escludi colonne selezionateQuesto perché gli array associativi salveranno la coppia chiave-valore e molto probabilmente quando usi Seleziona colonne direttamente con l'array associativo non sa davvero cosa fare. Di solito non dovrebbe selezionare nulla e quindi invertendolo selezionerebbe tutte le colonne (potrebbero esserci alcuni casi in cui l'array associativo valuterebbe come 1 quindi selezionerebbe la prima colonna).
Per estrarre le chiavi dall'array associativo, puoi usare << 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);
Puoi leggere ulteriori informazioni sugli array associativi dalla pagina della guida di JMP Guida allo scripting > Strutture dati > Array associativi . In questo caso potrei averli usati a causa delle loro operazioni impostate
Re: Escludi colonne selezionateGrazie per la risposta, jthi!È stato veloce!
Ho appena visto la tua risposta. Ho provato cose diverse e ho trovato una soluzione a 2 linee molto semplice.
cols = {"Col A", "Col B"};
dt << Select Columns(cols) << Invert Column Selection;Non ho mai visto array associativi usati e quando ho provato a usarne uno al posto di quello che ho attualmente per col, Select Columns ha selezionato una colonna che non era in cols, ma era solo 1 della selezione invertita. Strano.Sai perché potrebbe essere?
cols = Associative Array({"Col A", "Col B"});
dt << Select Columns(cols) << Invert Column Selection;Re: Escludi colonne selezionateDovresti usare N Items(col_names) invece di N Items(dt) nel ciclo 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;
Inoltre puoi semplificare il codice utilizzando Seleziona colonne
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;
Puoi anche evitare l'inversione selezionando direttamente le colonne corrette, ma molto probabilmente è più difficile da capire
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: Escludi colonne selezionateMi dispiace resuscitare questo thread, ma ho la stessa domanda e volevo una direzione se questo approccio come questo avrebbe funzionato e come migliorarlo:
//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: Escludi colonne selezionate</LINGO-SUB><LINGO-BODY id="lingo-body-73693" slang="en-US" mode="NONE"><P>Grazie!!! L'ho capito anche io, ma era un po' più lungo. Questo è perfetto :)</img></P></LINGO-BODY><LINGO-SUB id="lingo-sub-73657" slang="en-US" mode="NONE">Re: Escludi colonne selezionate</LINGO-SUB><LINGO-BODY id="lingo-body-73657" slang="en-US" mode="NONE"><P>Ecco la sintassi di come farlo:</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 )
);