Filtrer par ligne, empiler les colonnes?Je sais comment créer une table de sous-ensembles en fonction de 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 la nouvelle table aura la colonne 10 comme colonne fixe, puis je continue d'ajouter la colonne 20 avec seulement les lignes correspondant aux critères ci-dessus. Le nombre de lignes sera toujours le même.
La commande "Stack" ne fonctionne pas avec la sélection, donc je ne suis pas sûr de ce que les autres commandes peuvent faire?
ScriptingRe: 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.
Re : Filtrer par ligne, empiler les colonnes ?Insérer dans() ne fait pas ce qu'il semble que vous pensez qu'il fait.
Dans votre code, il insérerait la référence de table de données dt dans la liste dtstacked à plusieurs reprises. Cela n'a rien à voir avec les lignes ou les colonnes sélectionnées.
Vous devrez créer une nouvelle table de données des lignes et des colonnes sélectionnées à l'aide de Subset() et insérer cette référence dans dtstack, puis les concaténer.
Cependant, cela ne semble pas nécessaire. Étant donné que vous étendez simplement la sélection à chaque fois dans la boucle à la toute fin, vous pouvez créer un sous-ensemble des lignes et des colonnes sélectionnées et obtenir le même résultat que votre table de données concaténées.