Hallo allerseits -
Ich suche nach einer Spaltenformel, die die folgende gewünschte Spalte unten zurückgibt.Der Einfachheit halber hat in diesem Beitrag jede Gruppe drei Zeilen, aber der Datensatz, den ich derzeit habe, enthält Gruppen mit unterschiedlicher Anzahl von Zeilen.
Jede Hilfe wird geschätzt!
| Gruppe | Zeit | Punktzahl | Beim ersten Mal fehlgeschlagen (gewünschte Spalte) |
| A | 1 | Passieren | 8 |
| A | 3 | Passieren | 8 |
| A | 8 | Scheitern | 8 |
| B | 1 | Passieren | Passieren |
| B | 2 | Passieren | Passieren |
| B | 6 | Passieren | Passieren |
| C | 1 | Passieren | 3 |
| C | 3 | Scheitern | 3 |
| C | 7 | Scheitern | 3 |
@user8421 ,
Dies ist einfach eine unterhaltsame Alternative, die Datentabellenformeln verwendet. Dies funktioniert bei ungleichen Gruppengrößen und wenn die Tabelle nicht sortiert ist.
Die Logik besteht darin, die minimale Zeilennummer für Fehler in jeder Gruppe zu ermitteln. Col Minimum(... , By) ist der Schlüssel. Spaltenstatistikfunktionen mit der Option „By“ sind sehr nützliche, aber oft übersehene Funktionen.

Formel für Spalte „Zeile zuerst fehlgeschlagen“

Formel für die Spalte „Time First Failed“. Beachten Sie, dass die Formel auf der rechten Seite „Zeit“ lautet, wenn Ihnen die Syntax merkwürdig vorkommt. Wählen Sie dann „Aus“. Index von dem Reihe Funktionen und ziehen Sie Spalte 4, „Row First Failed“

Hier ist eine Formel, die mit Ihrer Beispieldatentabelle funktioniert.Darüber hinaus wurde es nicht getestet, daher müssen Sie möglicherweise einige Anpassungen vornehmen
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;
)
);