Salut tout le monde -
Je recherche une formule de colonne qui renverrait la colonne souhaitée suivante ci-dessous.Pour plus de simplicité, dans cet article, chaque groupe comporte 3 lignes, mais l'ensemble de données dont je dispose actuellement comporte des groupes avec un nombre variable de lignes.
Toute aide appréciée !
| Groupe | Temps | Score | Échec du premier échec (colonne souhaitée) |
| UN | 1 | Passer | 8 |
| UN | 3 | Passer | 8 |
| UN | 8 | Échouer | 8 |
| B | 1 | Passer | Passer |
| B | 2 | Passer | Passer |
| B | 6 | Passer | Passer |
| C | 1 | Passer | 3 |
| C | 3 | Échouer | 3 |
| C | 7 | Échouer | 3 |
@utilisateur8421 ,
Il s'agit simplement d'une alternative amusante qui utilise des formules de tableaux de données. Cela fonctionnera pour des tailles de groupe inégales et si le tableau n'est pas trié.
La logique est de trouver le nombre minimum de lignes pour les échecs dans chaque groupe. Col Minimum(... , Par) C'est la clé. Les fonctions statistiques de colonne utilisant l’option Par sont des fonctions très utiles, mais souvent négligées.

Formule pour la colonne « Échec de la première ligne »

Formule pour la colonne « Échec du premier échec ». Notez que si la syntaxe semble étrange, la formule de droite est Time, puis sélectionnez Indice du Rangée fonctions et faites glisser la colonne 4, "Échec de la première ligne"

Voici une formule qui fonctionne avec votre exemple de table de données.Il n'a pas été testé au-delà de cela, vous devrez donc peut-être procéder à quelques ajustements.
Names Default To Here( 1 );
dt = New Table( "Example",
Add Rows( 9 ),
New Column( "Group", Character, "Nominal", Set Values( {"A", "A", "A", "B", "B", "B", "C", "C", "C"} ) ),
New Column( "Time", Numeric, "Continuous", Format( "Best", 12 ), Set Values( [1, 3, 8, 1, 2, 6, 1, 3, 7] ) ),
New Column( "Score",
Character,
"Nominal",
Set Values( {"Pass", "Fail", "Pass", "Pass", "Pass", "Pass", "Pass", "Fail", "Fail"} )
)
);
dt << New Column( "First Time Failed",
character,
formula(
If( Row() == 1,
dt = Current Data Table();
check = :Score;
If( :Group == :Group[2],
Failed = Char( Col Max( :Time, :Group ), Failed = :Score )
);
,
If( :Group == Lag( :Group ),
If( :Score == "Fail",
check = "Fail"
);
Failed = Char( Col Max( :Time, :Group ) );
,
If( check == "Pass",
lagGroup = Lag( :Group );
:First Time Failed[dt << get rows where( :Group == lagGroup )] = "Pass";
Failed = Char( Col Max( :Time, :Group ) );
);
check = :Score;
)
);
failed;
)
);