我正在嘗試創建一個列來計算滯後 24 行的總和。 在本例中,我有一個“Precip”列,其中包含每小時降水總量。 第二列“降水站”表示記錄每個值的位置。 我已根據“日期時間”和“降水站”對列進行排序。 我正在尋找一種有效的方法來對 Precip 列中的前 24 個值進行求和,從而創建一個新列來告訴我過去 24 小時內下了多少雨。 此 24 小時總計是特定於站點的,因此如果滯後 24 降水量不匹配,則無法計算滯後 24 值。
我最終自己解決了這個問題,這是一個簡單的求和函數。 我想我會發布它以防其他人需要做這樣的事情。
If( :Precipitation Station == Lag( :Precipitation Station, 1 ),
Summation( i = 1, 24, Lag( :Precipitation, i ) ),
:Precipitation
);
我實際上並不是在嘗試計算給定站點/日期的總降水量,而是計算站點/前 24 小時內的總降水量。因此,例如,如果給定的日期時間是 1/3/2020 09:00:00 AM,我想獲取 precip 列中的前 24 個值並對它們求和。 因此,從 1/3/2020 08:00:00AM 開始,一直回到 1/2/2020 09:00:00 AM。本質上是一個移動的 24 小時時間窗口。 因此,該列將為我提供數據表中每一行過去 24 小時內的降雨量。
如果您嘗試計算給定日期/站點的降水量總和,請創建一個新列,該列只是日期時間的日期部分。然後按日期和站點製作表格,並將 Precip 放在中間。
該程序創建一個示例數據集,其中包含日期公式列和製表程序以按日期/站點計算降水量。
New Table( "Example", Add Rows( 20 ),
New Script( "Tabulate",
Tabulate(
Show Control Panel( 0 ),
Add Table(
Column Table( Analysis Columns( :Precip ) ),
Row Table( Grouping Columns( :Precip Date, :Station ) )
)
)
),
New Column( "Precip Datetime", Numeric, "Continuous", Format( "ddMonyyyy h:m:s", 22, 0 ),
Input Format( "ddMonyyyy h:m:s", 0 ),
Set Values(
[3660710400, 3660714000, 3660717600, 3660721200, 3660724800, 3660710400,
3660714000, 3660717600, 3660721200, 3660724800, 3660796800, 3660800400,
3660804000, 3660807600, 3660811200, 3660796800, 3660800400, 3660804000,
3660807600, 3660811200]
),
Set Display Width( 186 )
),
New Column( "Station", Character, "Nominal",
Set Values(
{"A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "A", "A", "A", "A",
"A", "B", "B", "B", "B", "B"}
)
),
New Column( "Precip", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 3, 4, 5, 3, 4, 5, 1, 1, 4, 5, 6, 7, 5, 4, 5, 6, 7, 8] )
),
New Column( "Precip Date", Character, "Nominal",
Formula( Short Date( :Precip Datetime ) )
)
);