KDB/Q:如何为select by编写函数

KDB/Q:如何为select by编写函数,kdb,Kdb,我们知道我们可以编写这样的函数 select avg val by category from tab 但是如果我需要编写一个复杂的定制函数,比如 select myfunc by category from tab 此处myfund将使用选项卡中的多个列进行计算。例如,在myfunc中,我可能会执行另一层的select by,可能会执行一些筛选等操作。作为一个基本示例,我如何将a+b+c+d select a+b+c+d by category from tab 在myfunc中,它可以

我们知道我们可以编写这样的函数

select avg val by category from tab
但是如果我需要编写一个复杂的定制函数,比如

select myfunc by category from tab
此处myfund将使用选项卡中的多个列进行计算。例如,在myfunc中,我可能会执行另一层的select by,可能会执行一些筛选等操作。作为一个基本示例,我如何将
a+b+c+d

select a+b+c+d by category from tab

在myfunc中,它可以看到a、b、c和d列,并对它们进行一些操作?

您可以将这些列以表格格式传递到函数中,例如:

q)t:([]col1:10?`a`b`c;col2:10?10;col3:10?1f;col4:10?.z.D)
q)select {break}[([]col2;col3;col4)] by col1 from t
'break
  [1]  {break}
          ^
q))x
col2 col3      col4
-------------------------
9    0.5785203 2008.02.04
7    0.1959907 2003.07.05
8    0.6919531 2007.12.27
如果要使用函数中的所有列,另一种方法是将表分组为子表,并为每个子表运行函数:

func each t group t`col1

您可以以表格格式将列传递到函数中,例如:

q)t:([]col1:10?`a`b`c;col2:10?10;col3:10?1f;col4:10?.z.D)
q)select {break}[([]col2;col3;col4)] by col1 from t
'break
  [1]  {break}
          ^
q))x
col2 col3      col4
-------------------------
9    0.5785203 2008.02.04
7    0.1959907 2003.07.05
8    0.6919531 2007.12.27
如果要使用函数中的所有列,另一种方法是将表分组为子表,并为每个子表运行函数:

func each t group t`col1

您可以很容易地用自己的函数替换avg,如下所示:

从选项卡中按类别选择{[a;b;c;d]a+b+c+d}[a;b;c;d]

如果要逐行执行,请同时使用两个
'

从选项卡中按类别选择{[a;b;c;d]a+b+c+d}'[a;b;c;d]


您能否提供一个示例,说明您试图通过函数中的附加by/filtering来实现什么?在我看来不是最好的方法

您可以很容易地用自己的函数替换avg,如下所示:

从选项卡中按类别选择{[a;b;c;d]a+b+c+d}[a;b;c;d]

如果要逐行执行,请同时使用两个
'

从选项卡中按类别选择{[a;b;c;d]a+b+c+d}'[a;b;c;d]


您能否提供一个示例,说明您试图通过函数中的附加by/filtering来实现什么?在我看来,这似乎不是最好的方法

事实上,我想了很多。我想你是对的。一种更好的方法是取消对表的分割,将列放入行中,然后从那里执行select by。尽管如此,你的回答还是很有帮助的!事实上,我给了它更多的想法。我想你是对的。一种更好的方法是取消对表的分割,将列放入行中,然后从那里执行select by。尽管如此,你的回答还是很有帮助的!