我正在尝试创建一个列来计算滞后 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 ) )
)
);