Besoin de suggestion sur la meilleure façon d'ajouter une colonne de table pour un ID qui fait cela ....<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Fondamentalement, j'ai cette table originale:
| Colonne A | Colonne B | Colonne A | Colonne B |
| une | e | je | m |
| b | F | j | n |
| c | g | k | o |
| ré | h | l | p |
Maintenant, ce que je veux faire est de créer une autre table avec un "nouvel ID de colonne" qui ressemble à ceci
| Nouvel identifiant de colonne | Colonne A | Colonne B | Colonne A | Colonne B |
| 1 | une | e | je | m |
| 1 | b | F | j | n |
| 1 | c | g | k | o |
| 1 | ré | h | l | p |
| 2 | une | e | je | m |
| 2 | b | F | j | n |
| 2 | c | g | k | o |
| 2 | ré | h | l | p |
| 3 | une | e | je | m |
| 3 | b | F | j | n |
| 3 | c | g | k | o |
| 3 | ré | h | l | p |
| X | une | e | je | m |
| X | b | F | j | n |
| X | c | g | k | o |
| X | ré | h | l | p |
Ce que je pense maintenant, c’est de cloner la table originale en créant un sous-ensemble. Et sur ce sous-ensemble, j'ajoute le "nouvel ID de colonne" avec une certaine valeur (identique pour toutes les lignes). Je répète le même processus en créant autant de sous-ensembles que nécessaire (un «nouvel ID de colonne» est ajouté à chaque sous-ensemble). Une fois que j'ai terminé, je peux simplement concaténer tous les sous-ensembles dans une seule table.
Je veux savoir si vous avez de meilleures idées que vous pouvez partager.
Re: Besoin de suggestion sur la meilleure façon d'ajouter une colonne de table pour un ID qui fait cela ....@Ian et @ms merci pour vos bonnes suggestions. Dans mon script actuel, j'intègre cette suggestion de @Ian (avec un mélange de @ms).
Re: Besoin de suggestion sur la meilleure façon d'ajouter une colonne de table pour un ID qui fait cela ....Comme souvent, la brièveté est une vertu!
J'ai tellement aimé la manière de Marcus que j'en ai fait une fonction pour une utilisation ultérieure:
NamesDefaultToHere ( 1 ) ;
// échantillon de données
dt1 = NewTable ( "Données source" ,
NewColumn ( "UNE" , Numérique , Continu , Formule ( AléatoireNormal ())) ,
NewColumn ( "B" , Numérique , Continu , Formule ( RandomInteger ( 1 , dix ))) ,
AddRows ( 6 ) ;
) ;
// Clone la table 'dt' 'n' fois. . .
cloneTable =
Une fonction ({ dt , n } , { Local par défaut } ,
les tables = Répéter ({ dt } , n - 1 ) ;
new_dt = dt << enchaîner ( les tables ) ;
new_dt << setName (( dt << getName ) || "cloné" || Carboniser ( n ) || "fois" ) ;
idCol = new_dt << nouvelleColonne ( "ID" , Numérique , Nominal , Formule ( Plafond ( Rangée () / NRow ( dt )))) ;
idCol << deleteFormula ;
new_dt << moveSelectedColumns ({ idCol } , "ToFirst" )
) ;
dt2 = cloneTable ( dt1 , 20 ) ;
Re: Besoin de suggestion sur la meilleure façon d'ajouter une colonne de table pour un ID qui fait cela ....Vous n'avez pas besoin de créer des sous-ensembles pour concaténer plusieurs copies. Vous pouvez simplement ajouter plusieurs fois le tableau d'origine dans la boîte de dialogue de concaténation. Si le nouvel identifiant est un compteur, une formule de colonne peut être utilisée pour générer l'identifiant.
Un exemple jsl:
// Stack dt n fois
dt = Tableau de données actuel () ;
n = dix ;
les tables = Répéter ({ dt } , n - 1 ) ;
new_dt = dt << enchaîner ( les tables ) ;
new_dt << Nouvelle colonne ( "Nouvel identifiant de colonne" , Numérique , Formule ( Plafond ( Rangée () / 4 ))) ;
Re: Besoin de suggestion sur la meilleure façon d'ajouter une colonne de table pour un ID qui fait cela ....S'il vous plaît, trouvez une alternative, mais je ne suis pas sûr que l'on puisse dire que c'est «meilleur»:
NamesDefaultToHere ( 1 ) ;
// échantillon (numérique!)
dt1 = NewTable ( "Données source" ,
NewColumn ( "UNE" , Numérique , Continu , Formule ( AléatoireNormal ())) ,
NewColumn ( "B" , Numérique , Continu , Formule ( RandomInteger ( 1 , dix ))) ,
AddRows ( 6 ) ;
) ;
// Clone les données dans dt1 'n1' times
n1 = 2 ;
n2 = NRow ( dt1 ) ;
la source = dt1 << getAllColumnsAsMatrix ;
destination = [] ;
pour ( je = 1 , je <= 2 , je ++, destination = VConcat ( destination , la source )) ;
// Crée une colonne ID en tant que vecteur
identifiant = Trier par ordre croissant ( Répéter (( 1 :: n1 ) `, n2 )) ;
// Assemble la table finale
cols = Insérer ( dt1 << getColumnNames ( Chaîne ) , "ID" , 1 ) ;
dt2 = AsTable ( identifiant || destination , << ColumnNames ( cols )) ;
dt2 << setName (( dt1 << getName ) || "cloné" || Carboniser ( n1 ) || "fois" ) ;
Si les données ne sont pas toutes numériques, l'option 'Obtenir toutes les colonnes en tant que matrice' fonctionne toujours, mais vous devez également vous aider à reconfigurer les valeurs en caractères lorsque vous assemblerez dt2.