假设我有这张桌子:
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
谢谢
答案 0 :(得分:2)
可以使用以下内容:
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
答案 1 :(得分:2)
尽管我希望迈克尔斯回答更多,但为完整起见,功能形式为:
q)c:c where(c:cols t)like"x_col*"
q)![t;();0b;c!flip(10*;c)]
col1 col2 x_col1 x_col2
-----------------------
a aa 10 110
b bb 20 220
c cc 30 330
d dd 40 440
q)![t;();0b;c!flip(*;`x_col1;c)]
col1 col2 x_col1 x_col2
-----------------------
a aa 1 11
b bb 4 44
c cc 9 99
d dd 16 176
/using functional might allow for more flexibility (where clauses etc)
q)![t;enlist(=;`col1;enlist`d);0b;c!flip(*;`x_col1;c)]
col1 col2 x_col1 x_col2
-----------------------
a aa 1 11
b bb 2 22
c cc 3 33
d dd 16 176