大家好 -
我正在寻找一个列公式,它将返回下面所需的列。为了简单起见,在这篇文章中,每个组都有 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;
)
);