【发布时间】:2021-05-06 20:34:52
【问题描述】:
我有一张要计算标准差的收益表。我的列看起来像
`day1`day2`day3
如何有效计算每列的标准差?
我知道有一个开发函数。但是,与 avg 不同,dev 不能在整个表上调用 任何帮助将不胜感激!
谢谢!
【问题讨论】:
-
考虑编辑您的问题以包含您迄今为止尝试过的代码以及您在使用该代码时遇到的问题。
标签: kdb
我有一张要计算标准差的收益表。我的列看起来像
`day1`day2`day3
如何有效计算每列的标准差?
我知道有一个开发函数。但是,与 avg 不同,dev 不能在整个表上调用 任何帮助将不胜感激!
谢谢!
【问题讨论】:
标签: kdb
是的,dev 不支持将表作为输入,但您可以在选择查询中的各个列上使用 dev:
q)t:([]day1:til 10;day2:2*til 10;day3:3*til 10)
q)t
day1 day2 day3
--------------
0 0 0
1 2 3
2 4 6
3 6 9
4 8 12
5 10 15
6 12 18
7 14 21
8 16 24
9 18 27
q)select dev day1, dev day2, dev day3 from t
day1 day2 day3
--------------------------
2.872281 5.744563 8.616844
Edt:如果不确定如何使用函数形式创建动态查询,请使用解析:
q)parse"select dev day1 from t"
?
`t
()
0b
(,`day1)!,(dev;`day1)
这对于为多列创建代码很有用:
// [table;where;by;cols]
?[t;();0b;
raze { (enlist x)!enlist (dev;x) } each `day1`day2`day3]
day1 day2 day3
--------------------------
2.872281 5.744563 8.616844
或者由于您有 100 多列,请使用 cols 和 except 来获取您想要获得标准差的所有列,并忽略您不需要的列
?[t;();0b;
raze { (enlist x)!enlist (dev;x) } each except[cols[t];`columns`to`ignore]
【讨论】:
如果您的桌子是“可翻转的”,那么您可以这样做:
q)enlist dev each flip t
day1 day2 day3
--------------------------
2.872281 5.744563 8.616844
【讨论】: