movingDynamic

首发版本:3.00.6

语法

movingDynamic(func, funcArgs, window, [maxWindow], [minPeriods])

详情

根据 window 中逐行指定的窗口长度,对 funcArgs 构造变长滑动窗口,并在每个窗口上调用聚合函数 func。每个窗口以当前位置的元素为右边界。

若指定 maxWindow,则第 i 行的实际窗口长度为 min(window[i], maxWindow);否则实际窗口长度为 window[i]。当窗口内非 NULL 观测值少于 minPeriods 时,该位置返回 NULL。

moving 不同,movingDynamicwindow 必须是正整型向量,不支持 DURATION 类型。minPeriods 可以大于 window 中的元素或 maxWindow,此时不满足最小观测值数量的位置返回 NULL。

注意: 当前暂不支持在流计算引擎中调用 movingDynamic

参数

func 聚合函数。

注意: 自定义聚合函数时,必须使用关键字 defg 定义。详情参考:自定义聚合函数

funcArgs func 的参数,可以是向量、字典或矩阵。若 func 有多个参数,则以元组形式传入,且各参数的长度必须相同。

window 正整型向量,逐行指定滑动窗口长度。其长度必须与 funcArgs 的长度相同,且不能包含 NULL 或非正整数。

maxWindow 可选参数,正整型标量,用于限制实际窗口长度。当 window[i] > maxWindow 时,第 i 行使用 maxWindow 作为窗口长度。

minPeriods 可选参数,正整型标量,表示窗口内产生结果所需的最少非 NULL 观测值数量。默认值为当前行的实际窗口长度。该参数可以大于当前行的实际窗口长度。

返回值

返回结果的长度与 funcArgs 相同。对于向量或字典输入,通常返回向量;对于矩阵输入,逐列计算并返回矩阵。若 func 返回元组,则结果为元组,其中每个元素均为对应的计算结果。

例子

例1. 按 window 中逐行指定的长度计算移动总和。

movingDynamic(func=sum, funcArgs=1..5, window=[1, 2, 3, 2, 4])
// output: [1,3,6,7,14]

例2. 指定 maxWindow = 3,将超过 3 的窗口长度截断为 3;指定 minPeriods = 1,使窗口中的有效观测值达到 1 个即可产生结果。

w = [1, 5, 2, 100, 4]
movingDynamic(func=sum, funcArgs=1..5, window=w, maxWindow=3, minPeriods=1)
// output: [1,3,5,9,12]

例3. 比较默认 minPeriods 与显式指定 minPeriods = 1 时的结果。

movingDynamic(func=avg, funcArgs=1..5, window=[3, 3, 3, 3, 3])
// output: [,,2,3,4]

movingDynamic(func=avg, funcArgs=1..5, window=[3, 3, 3, 3, 3], minPeriods=1)
// output: [1,1.5,2,3,4]

相关函数:moving, movingValid