我有一个很大的数据集,其中的周期随着时间的推移而变化。 我想创建一个列,该列在每个周期开始时索引为 1,并继续计数,直到下一个周期开始,然后计数从 0 开始。 我尝试使用如下所示的计数和序列函数,但当我的第二个周期具有比第一个周期更多的值时,我遇到了问题(参见下图,其中周期观察是我希望公式生成的值,第 109 列是由脚本生成。)
dt << 新列("循环观察", 数值, 公式 (If(
:周期 == 1, 序列( 0, 1080, 1 ),
:周期 == 2, 序列( 0, 1439, 1 ),
:周期 == 3, 序列( 0, 360, 1 ),
:周期 == 4, 序列( 0, 360, 1 ),
:周期 == 5, 序列( 0, 360, 1 ),
:周期 == 6, 序列( 0, 180, 1 ),
:周期 == 7, 序列( 0, 180, 1 ),
:周期 == 8, 序列( 0, 180, 1 ),
:周期 == 9, 序列( 0, 180, 1 ),
:周期 == 10, 序列( 0, 180, 1 ),
序列( 0, 180, 1 )
)));

作为@tx尼尔森说社区里有很多针对类似问题的解决方案。
您可以使用 Lag(),但 Col 公式在以下情况下也很有帮助:
Col Cumulative Sum(1, :Cycle)
如果需要将其移 1,可以在 Col Cumulative Sum() 之后的公式中添加 -1。
在这种特殊情况下不一定有帮助,但非常有用的视频@brady_brady这在某些时候很可能有用:
特殊公式栏
之前有几个关于此主题的讨论条目,但由于这是一个简单的解决方案,因此我为您的具体情况创建了另一个示例。
附件是一个数据表,其中包含计算所需值的公式列

公式为
If( Row() == 1,
value = 1,
If( :Cycle != Lag( :Cycle ),
value = 1,
value
++)
);
value;
虽然我的解决方案运行良好, @jthi下面的解决方案是一个更好的解决方案。