我有一個很大的數據集,其中的周期隨著時間的推移而變化。 我想建立一個列,該列在每個週期開始時索引為 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下面的解決方案是一個更好的解決方案。