Filtrer par ligne, empiler les colonnes ?Je sais comment créer un tableau de sous-ensembles basé sur certains critères :
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 ) );
Mais maintenant, je dois répéter ce qui précède pour plusieurs critères et empiler la sélection, c'est-à-dire que le nouveau tableau aura la colonne 10 comme colonne fixe, puis je continue d'ajouter la colonne 20 avec uniquement les lignes correspondant aux critères ci-dessus. Le nombre de lignes sera toujours le même.
La commande « Pile » ne fonctionne pas avec la sélection, donc je ne suis pas sûr des autres commandes qui peuvent faire cela ?
Mélange et nettoyage des donnéesRe: Filtrer par ligne, empiler les colonnes?Voici un exemple de moyen simple de supprimer les lignes sélectionnées lors de l'utilisation de la plateforme 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;
Re: Filtrer par ligne, empiler les colonnes?(Hit accepter comme solution par erreur)
Merci mais je ne veux pas supprimer les lignes sélectionnées. Je peux m'en occuper, mais comment ajouter la sélection lors de l'utilisation de Stack?Re: Filtrer par ligne, empiler les colonnes?Voici comment je pensais que cela pouvait être fait (mais cela ne fonctionne pas):
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 ) );En gros, je filtre la table active selon la colonne "Freq", d'abord par la valeur "F0" puis par "F1". Ceci est situé dans la colonne 19. J'ajoute cette sélection à la liste de sélection appelée «stackcols». Donc, après la boucle, je m'attends à ce que ce soit une liste de deux colonnes. Ensuite, je veux en faire un tableau (appelé "aa"). Mais ça ne fonctionne pas.
Re: Filtrer par ligne, empiler les colonnes?Ah ..... vous avez raison de supprimer les lignes sélectionnées.Mais pour supprimer les non sélectionnés, utilisez simplement
dtStack << Invert Row Selection;
puis supprimez les lignes.
Pour ajouter plusieurs tables de données empilées indépendantes, il vous suffit de:
- Avant de démarrer les instances répétées de Stack, créez une table de données de base vide qui finira par avoir toutes les tables empilées concaténées.
dtBase = New Table("Base");
- Ensuite, pour chacune des tables empilées que vous créez,
- Supprimez les lignes que vous ne voulez pas de la table de données empilées
- Concaténer la table empilée à la table de base
dtBase << Concatenate( dtStacked );
- Supprimer la table empilée
Close( dtStacked, nosave );
Re: Filtrer par ligne, empiler les colonnes?Merci, mais cela n'a pas fonctionné:
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 est vide.