Filtra per riga, impila colonne?So come creare una tabella di sottoinsiemi basata su alcuni criteri:
dt << Row Selection( Select where( (:Stat == "mean"), Current Selection( Extend )) );
dt << Select Columns( [10, 20] );
dt2 << Subset( Output Table( "test"), Selected Rows( 1 ), Selected columns( 1 ) );
Ma ora devo ripetere quanto sopra per più criteri e impilare la selezione, ovvero la nuova tabella avrà la colonna 10 come colonna fissa, quindi continuo ad aggiungere la colonna 20 con solo le righe che corrispondono ai criteri sopra. Il numero di righe sarà sempre lo stesso.
Il comando "Stack" non funziona con la selezione, quindi non sei sicuro di quali altri comandi possano farlo?
ScriptingRi: Filtra per riga, impila colonne?Di seguito è riportato un esempio di un modo semplice per eliminare le righe selezionate quando si utilizza la piattaforma Stack
names default to here(1);
// Open Data Table: Big Class.jmp
// → Data Table( "Big Class" )
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << Row Selection( Select where( (:Sex=="F"), Current Selection( "Extend" )) );
// Stack data table
dtStack = dt << Stack(
columns( :height, :weight ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
dtStack << delete rows;
Ri: Filtra per riga, impila colonne?(Premi accetta come soluzione per errore)
Grazie ma non voglio eliminare le righe selezionate. Posso occuparmene, ma come aggiungerei la selezione quando uso Stack?Ri: Filtra per riga, impila colonne?Ecco come pensavo che si potesse fare (ma non funziona):
my_list = {"F0","F1"};
stackcols = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( stackcols, dt )
);
dt2 << Subset( Output Table( "aa"), Selected Rows( 1 ), Selected columns( 1 ) );In sostanza, filtro la tabella attiva secondo la colonna "Freq", prima con il valore "F0" e poi con "F1". Si trova nella colonna 19. Aggiungo quella selezione all'elenco di selezione chiamato "stackcols". Quindi, dopo il ciclo, mi aspetto che questo sia un elenco di due colonne. Quindi voglio ricavarne una tabella (chiamata "aa"). Ma non sta funzionando.
Ri: Filtra per riga, impila colonne?Ah ..... hai ragione riguardo l'eliminazione delle righe selezionate.Ma per eliminare ciò che non è selezionato, basta usare
dtStack << Invert Row Selection;
e quindi elimina le righe.
Per aggiungere più tabelle di dati Stacked indipendenti, è sufficiente:
- Prima di avviare le istanze Stack ripetute, creare una tabella dati di base vuota che finirà per avere tutte le tabelle impilate concatenate ad essa
dtBase = New Table("Base");
- Quindi per ciascuna delle tabelle impilate che crei,
- Elimina le righe che non desideri dalla tabella dei dati in pila
- Concatena la tabella Stacked alla tabella Base
dtBase << Concatenate( dtStacked );
- Elimina la tabella in pila
Close( dtStacked, nosave );
Ri: Filtra per riga, impila colonne?Grazie, ma non ha funzionato:
dt = current data table();
my_list = {"F0","F1"};
dtBase = New Table("Base");
dtStacked = {};
For( i = 1, i <= N Items( my_list ), i++,
dt << Row Selection( Select where( (:Freq==my_list[i]), Current Selection( "Extend" )) );
dt << Select Columns( [19] );
Insert Into( dtStacked, dt );
dtBase << Concatenate( dtStacked );
Close( dtStacked, nosave );
);dtBase è vuoto.
Re: Filtrare per riga, impilare le colonne?Inserire() non fa quello che sembra tu pensi che faccia.
Nel tuo codice inserirebbe ripetutamente il riferimento alla tabella dati dt nell'elenco dtstacked. Non ha nulla a che fare con le righe o le colonne selezionate.
Dovrai creare una nuova tabella dati delle righe e delle colonne selezionate utilizzando Subset() e inserire tale riferimento in dtstacked e quindi concatenarli.
Tuttavia, non sembra necessario. Poiché stai solo estendendo la selezione ogni volta attraverso il ciclo alla fine, potresti fare un sottoinsieme delle righe e delle colonne selezionate e ottenere lo stesso risultato della tabella di dati concatenata.