首页 > 解决方案 > 如何将函数应用于 KDB 中的某些列?

问题描述

假设我有这张桌子:

t: flip `col1`col2`x_col1`x_col2!(`a`b`c`d;`aa`bb`cc`dd;1 2 3 4;11 22 33 44)

col1    col2    x_col1  x_col2   x_col...
a         aa         1      11
b         bb         2      22
c         cc         3      33
d         dd         4      44

我可以有任意数量的列,称为 x_col1..100 等。我怎么能说所有匹配“x_col*”的列乘以 10?

col1    col2    x_col1  x_col2   x_col...
a         aa        10     110
b         bb        20     220
c         cc        30     330
d         dd        40     440

谢谢

标签: kdb

解决方案


可以使用类似的东西:

q)@[t;c where (c:cols t) like "x_col*";*;10]
col1 col2 x_col1 x_col2
-----------------------
a    aa   10     110
b    bb   20     220
c    cc   30     330
d    dd   40     440

编辑:如果通过 x_col1 查看多个例如:

@[t;c where i;*;(sum i:(c:cols t) like "x_col*")#enlist t`x_col1]
col1 col2 x_col1 x_col2
-----------------------
a    aa   1      11
b    bb   4      44
c    cc   9      99
d    dd   16     176

推荐阅读