<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour,
J'ai une liste de chaînes qui sont des noms de colonnes. Je veux déterminer leur emplacement de colonne (i) dans un tableau de données, puis ajouter une nouvelle colonne avec la formule (Colonne (i) + Colonne (i + 1)). Mon code ressemble à ceci:
| UNE | B | C | ré | E | F |
|---|
1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 |
| 1 | 2 | 3 | 4 | 5 | 6 |
cols = dt << Obtenir les noms de colonne (St
bague);
list = {"B", "D"};
n = N éléments (liste);
localiser = {}:
Pour (i = 1, i <= n, i ++,
Localiser = Loc (dt, liste )
Nouvelle colonne ("Nouvelle", Formule (Colonne (localiser ) + Colonne (localiser + 1)))
)
J'ai des problèmes parce que Loc () renvoie une matrice et Column () ne peut évaluer qu'un nombre. Je veux que ma table de données finale ressemble à ceci:
| UNE | B | C | ré | E | F | Nouveau | Nouveau 2 |
|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
Quelqu'un peut m'aider?
Une colonne de formule ne fonctionnera naturellement pas si ses colonnes dépendantes sont supprimées. Si vous souhaitez supprimer les colonnes utilisées par la formule, à quoi sert-il d'utiliser des formules de colonne en premier lieu? Si vous êtes seulement après la somme et que vous n'êtes pas intéressé par les avantages dynamiques offerts par une formule de colonne, je vous suggère de ne pas utiliser de formules (ce qui facilite également la tâche).
Essayez ceci sur le tableau ci-dessus:
liste = { "B" , "RÉ" } ;
Localiser = Expr ( Loc ( cols , liste [ je ] ) [ 1 ] ) ;
Pour ( je = 1 , je <= N articles ( liste ) , je ++,
cols = dt << Obtenir les noms de colonne ( Chaîne ) ;
col = dt << Nouvelle colonne ( "Nouveau" , numérique ) ;
Pour chaque rangée ( col [] = Colonne ( Localiser ) [] + Colonne ( Localiser + 1 ) [] ) ;
dt << supprimer des colonnes ( Colonne ( Localiser ) , Colonne ( Localiser + 1 ) ) ;
col << nom de l'ensemble ( liste [ je ] ) ;
) ;
Merci beaucoup! Cette approche fonctionne très bien.
J'ai aussi une question de suivi. Je voudrais apporter quelques modifications aux colonnes de cette nouvelle table:
| UNE | B | C | ré | E | F | Nouveau | Nouveau 2 |
|---|
1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
| 1 | 2 | 3 | 4 | 5 | 6 | 5 | 9 |
Existe-t-il un moyen de supprimer les 4 colonnes qui ont été additionnées pour créer les colonnes "Nouveau" et "Nouveau 2" et les renommer à l'aide de list = {"B", "D"} afin que la table résultante ressemble à ceci:
Obtenir des variables de colonne dans les formules de colonne par jsl n'est pas simple. La formule doit ressembler exactement à l'expression finale, c'est-à-dire que rien n'est évalué automatiquement. L'astuce consiste à définir et à manipuler des expressions (ou des chaînes), puis à utiliser la bonne combinaison d'évaluation, d'analyse, etc.
Vous trouverez ci-dessous un exemple qui semble fonctionner. Il est un peu circulaire car il localise les colonnes par leur nom et le récupère ensuite, qui est ensuite analysé. Banc! Je ne pouvais pas trouver une procédure plus simple, mais je suis intéressé si quelqu'un a une idée de solution plus élégante.
// fabrique la table d'exemple
dt = Nouvelle table ( "tester" ,
Ajouter des lignes ( 3 ) ,
Nouvelle colonne ( "UNE" , Numérique , Continu , Format ( "Meilleur" , 1 ) , Définir des valeurs ( [ 1 , 1 , 1 ] ) ) ,
Nouvelle colonne ( "B" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir des valeurs ( [ 2 , 2 , 2 ] ) ) ,
Nouvelle colonne ( "C" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir des valeurs ( [ 3 , 3 , 3 ] ) ) ,
Nouvelle colonne ( "RÉ" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir des valeurs ( [ 4 , 4 , 4 ] ) ) ,
Nouvelle colonne ( "E" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir des valeurs ( [ 5 , 5 , 5 ] ) ) ,
Nouvelle colonne ( "F" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir des valeurs ( [ 6 , 6 , 6 ] ) )
) ;
// le script commence ici
cols = dt << Obtenir les noms de colonne ( Chaîne ) ;
liste = { "B" , "RÉ" } ;
// Localiser la colonne expr
Localiser = Expr ( Loc ( cols , liste [ je ] ) [ 1 ] ) ;
// Nouvelle colonne avec la formule expr
F = Expr ( Nouvelle colonne ( "Nouveau" , Formule ( Expr ( Analyser ( Colonne ( Localiser ) << avoir un nom ) )
+ Expr ( Analyser ( Colonne ( Localiser + 1 ) << avoir un nom ) ) ) ) ) ;
// Liste de boucle
Pour ( je = 1 , je <= N articles ( liste ) , je ++,
Eval ( Eval Expr ( F ) )
) ;