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

作为@txnelson说社区中有很多类似问题的解决方案。
您可以使用 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下面的解决方案是一个更好的解决方案。