Comment créer un nombre basé sur le groupe dans une colonneSalut,
J'ai une colonne catégorielle qui a répété le même ordre de chaîne au hasard. Je veux étiqueter le numéro de chaque groupe qui a la même chaîne comme l'exemple de l'image. Comment puis-je faire pour créer la colonne de résultat ?

Automatisation et scriptRe : Comment créer un nombre basé sur un groupe dans une colonneque diriez-vous d'utiliser "recoder la nouvelle colonne" ;

scénario:
// New data table
// → Data Table( "Untitled" )
New Table( "Untitled" );
// Recode column: result
Local( {dt, col1},
dt = Data Table( "Untitled" );
dt << Begin Data Update;
col1 = dt << New Column( dt:Column 1 );
col1 << Set Name( "result" );
dt << Move Selected Columns( {col1}, after( dt:Column 1 ) );
dt << Recode Column(
dt:Column 1,
{Map Value(
_rcOrig,
{"aaa", "1", "bb", "2", "ccc", "3", "ddd", "4", "eee", "5"},
Unmatched( _rcNow )
)},
Update Properties( 1 ),
Target Column( col1 )
);
dt << End Data Update;
);Re : Comment créer un nombre basé sur un groupe dans une colonneJe collecte quotidiennement de nouvelles données et j'aurai beaucoup de nouvelles chaînes. Besoin d'une meilleure façon de le faire que de coder en dur en utilisant la nouvelle colonne de recodage
Re : Comment créer un nombre basé sur un groupe dans une colonneSelon le type de colonne que vous voulez et la quantité de scripts que vous êtes prêt à faire, il existe plusieurs options. Voici une option qui pourrait fonctionner
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(9),
Compress File When Saved(1),
New Column("Column 1",
Character,
"Nominal",
Set Values({"aa", "bb", "cc", "aa", "bb", "cc", "aa", "bb", "cc"})
)
);
dt << New Column("col", Numeric, Ordinal, << Set Each Value(
vals = As Constant(Associative Array(:Column 1 << get values) << get keys);
Contains(vals, :Column 1)
));Re : Comment créer un nombre basé sur un groupe dans une colonneSalut,
Voici une approche laide qui attribuera un identifiant numérique à votre liste d'identifiants
Col Rank( :Column1, <<TIE></TIE>
Le problème est que ces identifiants uniques ne seront pas créés par incréments de 1.
Je travaille toujours sur une meilleure façon, mais cela pourrait commencer.
Meilleur.
TS
Re : Comment créer un nombre basé sur un groupe dans une colonneRe-bonjour,
J'ai compris (voir ci-dessous):
aa = Associative Array( :GROUP );
kk = Associative Array( :GROUP ) << Get Keys;
For( i = 1, i <= N Items( kk ), i++,
aa[kk[i]] = i
);
aa[:GROUP];
J'espère que cela fonctionnera pour votre application.
Meilleur,
TS
Re : Comment créer un nombre basé sur un groupe dans une colonnevoici une autre façon de le faire.
de cette façon crée un tableau récapitulatif et attribue un numéro à chaque valeur unique. par défaut, cela se fait par ordre croissant mais peut être décroissant ou tout autre ordre que vous souhaitez.
la formule actuelle de numérotation peut également être plus sophistiquée pour différentes unités ou incréments selon les besoins.
toutes les étapes peuvent également être effectuées en cliquant sur les boutons dans les menus
Faites-nous savoir si cela fonctionne.
// create data table to work with
dt1 = New Table( "Untitled", Add Rows( 11 ),
New Column( "Column 1", Character, "Nominal",
Set Values({"aaa", "bb", "ccc", "aaa", "ddd", "eee", "ccc", "bb", "bb", "ccc", "aaa"})
)
);
// start working
// Data table summary
dt2 = dt1 << Summary( Group( :Column 1 ), Freq( "None" ), Weight( "None" ), Link to original data table( 0 ));
// Delete column: N Rows
dt2 << Delete Columns( :N Rows );
// New column: result
dt2 << New Column( "result", Numeric, "Continuous", Format( "Best", 12 ),Formula( Row() ));
// Delete column formula: result
dt2:result << Delete Formula;
// Update data tables
dt1 << Update(
With( Data Table( dt2 ) ),
Match Columns( :Column 1 = :Column 1 ),
Replace Columns in Main Table( None )
);
// Close Data Table: Untitled By (Column 1)
Close( dt2, no save );