大家好 -
我正在尋找一個列公式,它將返回下面所需的列。為了簡單起見,在這篇文章中,每個組都有 3 行,但我當前擁有的數據集具有不同行數的組。
任何幫助表示讚賞!
| 團體 | 時間 | 分數 | 第一次失敗(所需列) |
| A | 1 | 經過 | 8 |
| A | 3 | 經過 | 8 |
| A | 8 | 失敗 | 8 |
| 乙 | 1 | 經過 | 經過 |
| 乙 | 2 | 經過 | 經過 |
| 乙 | 6 | 經過 | 經過 |
| C | 1 | 經過 | 3 |
| C | 3 | 失敗 | 3 |
| C | 7 | 失敗 | 3 |
@用戶8421 ,
這只是一個使用數據表公式的有趣替代方案。 它將適用於不相等的組大小以及表未排序的情況。
邏輯是找到每個組中失敗的最小行數。 列最小值(...,按)是關鍵。 使用 By 選項的列統計函數非常有用,但經常被忽視。

“第一個行失敗”列的公式

“首次失敗時間”列的公式。 請注意,如果語法看起來很奇怪,右邊的公式是 Time,然後選擇下標來自排函數並拖動第 4 列“Row First Failed”

以下是適用於示例數據表的公式。除此之外尚未進行過測試,因此您可能需要進行一些調整
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;
)
);