如何在Google Sheets中用ARRAYFORMULA计算移动样本的样本方差
Google Sheets 批量实现移动窗口样本方差(适配数组公式需求)
针对你需要批量计算两种移动窗口样本方差的需求,直接用Google Sheets原生支持的BYROW(替代ARRAYFORMULA的更灵活写法)就能解决,具体方案如下:
一、基于行号的10行固定窗口方差
原来的INDIRECT写法无法适配数组,换用OFFSET配合BYROW实现批量计算:
在VAR列的第一行(比如C1)输入:
=BYROW(B:B, LAMBDA(x, IF(ROW(x)<10, "", VAR(OFFSET(B1, ROW(x)-10, 0, 10, 1)))))
- 逻辑:遍历B列每一行,行号小于10时留空,从第10行开始,取当前行往上数9行(共10行)的B列数据计算样本方差。
二、基于时间的1小时滑动窗口方差
原来的QUERY单单元格写法改成数组批量计算,同样用BYROW:
在VAR列的第一行输入:
=BYROW(A:A, LAMBDA(t, IF(ROW(t)<=1, "", VAR(QUERY(A:B, "select B where A > datetime '"&TEXT(t-1/24, "yyyy-mm-dd HH:mm:ss")&"' and A <= datetime '"&TEXT(t, "yyyy-mm-dd HH:mm:ss")&"'", 0)))))
- 逻辑:遍历A列每个时间点,跳过表头(A1),对每个时间查询过去1小时内的B列数据,计算对应样本方差(
1/24是1小时在日期序列中的数值等价写法,比60/(24*60)更简洁)。
补充说明
如果你的Google Sheets版本不支持BYROW,可以用MMULT结合数组构造窗口的方式,但BYROW写法更直观易维护,建议优先使用。
内容的提问来源于stack exchange,提问作者pdv2001
相关产品推荐
相关产品推荐

