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 不同,movingDynamic 的 window
必须是正整型向量,不支持 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
