Oui, un nombre variable de légumes rendra cela plus compliqué. Il est probablement plus facile de construire les valeurs de la concaténation dans le script plutôt qu'une formule.
Jetez un oeil à cette version de votre script pour voir comment je le ferais.
orig = New Table( "Fruit vs Veggies",
Add Rows( 48 ),
New Column( "Fruit",
Character,
"Nominal",
Set Values(
{"Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb",
"Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb",
"Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Chrnb2", "Chrnb2", "Chrnb2",
"Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2",
"Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2",
"Chrnb2", "Chrnb2"}
)
),
New Column( "Vegetable",
Character,
"Nominal",
Set Values(
{"nuclear chromosome", "cellular_component", "intracellular", "cell", "nucleus",
"chromosome", "organelle", "immune system process", "biological_process",
"anatomical structure development", "DNA metabolic process",
"cellular nitrogen compound metabolic process", "molecular_function", "cytoplasm",
"cytoskeleton", "DNA binding", "nucleotidyltransferase activity",
"biosynthetic process", "response to stress", "cell death", "signal transduction",
"cytoskeletal protein binding", "lyase activity", "enzyme binding",
"homeostatic process", "ion binding", "protein complex",
"cellular component assembly", "cellular nitrogen compound metabolic process",
"transmembrane transport", "ion binding", "cell proliferation",
"immune system process", "nervous system process", "response to stress",
"cell-cell signaling", "molecular_function", "cell", "cell morphogenesis",
"biological_process", "anatomical structure development", "cell differentiation",
"transport", "signal transduction", "plasma membrane", "cellular_component",
"signal transducer activity", "transmembrane transporter activity"}
)
),
New Column( "Vegetable number",
Numeric,
"Nominal",
Format( "Best", 9 ),
Formula( Col Rank( :Vegetable, :Fruit ) )
)
);
split = orig << Split(
Split By( :Vegetable number ),
Split( :Vegetable ),
Group( :Fruit ),
Sort by Column Property
);
vc = {};
For( i = 1, i <= N Row( split ), i++,
vc[i] = Column( 2 )[i];
For( j = 3, j <= N Col( split ), j++,
If( Column( j )[i] != "",
vc[i] = vc[i] || ", " || Column( j )[i]
)
);
);
split << New Column( "Veggies_concat", character, set values( vc ) );Salut Jef,
Merci beaucoup pour la réponse rapide.Votre description du problème est stop on.
Cependant, le nombre de types de légumes peut varier avec chaque fruit, ce qui entraînera un nombre différent de colonnes remplies. Cela conduit à des virgules/séparateurs supplémentaires (pourraient être nettoyés) à la fin. De plus, une fois scripté, il ne permet pas d'ajuster automatiquement le nombre variable d'éléments différents (c'est-à-dire les légumes) à chaque fois que le script est exécuté.
Toute suggestion sur la possibilité d'ajuster automatiquement le nombre de colonnes après les étapes de fractionnement serait appréciée.
Merci beaucoup
Sébastien
New Table( "Fruit vs Veggies",
Add Rows( 48 ),
New Script(
"Source",
Data Table( "mart_export (1)" ) << Subset(
Selected Rows( 0 ),
Rows(
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
39, 40, 41, 42, 43, 44, 45, 46, 47, 48]
),
columns( :Fruit, :Vegetable )
)
),
New Script(
"Concatenate vegetables per fruits",
dt = Data Table( "Fruit vs Veggies" );
New Column( "Vegetable number",
Character,
"Nominal",
formula( Col Rank( :Vegetable, :Fruit ) )
);
Data Table( "Fruit vs Veggies" ) << Split(
Split By( :Vegetable number ),
Split( :Vegetable ),
Group( :Fruit ),
Output Table( "Strange fruits" ),
Sort by Column Property
);
Data Table( "Strange fruits" ) << New Column( "Vegggies_concat",
Character,
"Nominal",
formula(
:Name( "1" ) || ", " || :Name( "2" ) || ", " || :Name( "3" ) || ", " ||
:Name( "4" ) || ", " || :Name( "5" ) || ", " || :Name( "6" ) || ", " ||
:Name( "7" ) || ", " || :Name( "8" ) || ", " || :Name( "9" ) || ", " ||
:Name( "10" ) || ", " || :Name( "11" ) || ", " || :Name( "12" ) || ", "
|| :Name( "13" ) || ", " || :Name( "14" ) || ", " || :Name( "15" ) ||
", " || :Name( "16" ) || ", " || :Name( "17" ) || ", " || :Name( "18" )
|| ", " || :Name( "19" ) || ", " || :Name( "20" ) || ", " ||
:Name( "21" ) || ", " || :Name( "22" ) || ", " || :Name( "23" ) || ", "
|| :Name( "24" ) || ", " || :Name( "25" ) || ", " || :Name( "26" ) ||
", " || :Name( "27" )
)
);
Data Table( "Strange fruits" ) << Subset(
Output Table( "Strange fruits_clean" ),
All rows,
columns( :Fruit, :Vegggies_concat )
) << close window;
),
New Column( "Fruit",
Character,
"Nominal",
Set Values(
{"Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb",
"Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb",
"Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb", "Polb",
"Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2",
"Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2",
"Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2", "Chrnb2"}
)
),
New Column( "Vegetable",
Character,
"Nominal",
Set Values(
{"nuclear chromosome", "cellular_component", "intracellular", "cell",
"nucleus", "chromosome", "organelle", "immune system process",
"biological_process", "anatomical structure development",
"DNA metabolic process", "cellular nitrogen compound metabolic process",
"molecular_function", "cytoplasm", "cytoskeleton", "DNA binding",
"nucleotidyltransferase activity", "biosynthetic process",
"response to stress", "cell death", "signal transduction",
"cytoskeletal protein binding", "lyase activity", "enzyme binding",
"homeostatic process", "ion binding", "protein complex",
"cellular component assembly",
"cellular nitrogen compound metabolic process", "transmembrane transport",
"ion binding", "cell proliferation", "immune system process",
"nervous system process", "response to stress", "cell-cell signaling",
"molecular_function", "cell", "cell morphogenesis", "biological_process",
"anatomical structure development", "cell differentiation", "transport",
"signal transduction", "plasma membrane", "cellular_component",
"signal transducer activity", "transmembrane transporter activity"}
)
),
New Column( "Vegetable number",
Numeric,
"Nominal",
Format( "Best", 9 ),
Formula( Col Rank( :Vegetable, :Fruit ) )
)
)
@txnelson La solution de peut être ce que vous voulez, mais votre description et votre exemple ne m'indiquent pas clairement ce que vous recherchez.
Je vais renommer certaines choses dans votre tableau pour clarifier ce que je pense que vous voulez (je peux me tromper sur ce que vous voulez cependant) et ensuite vous montrer comment l'obtenir :
Ce que tu as:
| Fruit |
Légume |
| pomme |
asperges |
| pomme |
brocoli |
| banane |
chou de Bruxelles |
| banane |
asperges |
Ce que tu veux:
| Fruit |
Légumes |
| pomme |
asperges | brocoli |
| banane |
chou de Bruxelles | asperges |
Pour obtenir cela peut utiliser Tableaux->Fractionner pour obtenir un tableau de données, mais vous aurez besoin d'une colonne supplémentaire pour identifier le nombre de légumes, dans l'ordre de chaque ligne. Donc, quelque chose comme ça :
| Fruit |
Légume |
Numéro de légumes |
| pomme |
asperges |
1
|
| pomme |
brocoli |
2 |
| banane |
chou de Bruxelles |
1 |
| banane |
asperges |
2 |
Si vous n'avez pas déjà un Numéro de légumes colonne dans votre tableau de données, il existe plusieurs façons de la créer, en fonction de votre situation, alors revenez ici pour plus d'aide avec cette étape.
Utilisez ensuite Tableaux->Fractionner avec Fractionner par = Numéro de légumes , Fractionner les colonnes = Légume , Groupe = Fruit .

Vous obtiendrez un tableau comme celui-ci :
Fruit
|
1
|
2
|
pomme
|
asperges
|
brocoli
|
banane
|
chou de Bruxelles
|
asperges
|
Ensuite, il vous suffit de concaténer les colonnes 1 et 2 à l'aide de l'éditeur de formules.

J'espère que cela aide. Si ce n'est pas le cas, veuillez poster des éclaircissements sur exactement ce que vous avez et ce que vous voulez.