Dataframe KDB和x2B;如何检查所有列的符号是否相同?

Dataframe KDB和x2B;如何检查所有列的符号是否相同?,dataframe,match,kdb,Dataframe,Match,Kdb,我有一个包含以下列的表:日期、名称、现金类型、t1、t2、t3。如果t1、t2和t3列相等,我想添加一个返回布尔值的列 这是可行的,但我必须硬编码t1、t2和t3。列名称根据日期而变化。我想将列dateCols:-3#cols data的列表传递到下面的代码中 update validateSign: {x=/} each flip signum (d2018_05_28; d2018_05_29; d2018_05_30) from data 对于包含变量列名的update语句,需要使用函数

我有一个包含以下列的表:日期、名称、现金类型、t1、t2、t3。如果t1、t2和t3列相等,我想添加一个返回布尔值的列

这是可行的,但我必须硬编码t1、t2和t3。列名称根据日期而变化。我想将列
dateCols:-3#cols data
的列表传递到下面的代码中

update validateSign: {x=/} each flip signum (d2018_05_28; d2018_05_29; d2018_05_30) from data

对于包含变量列名的update语句,需要使用函数更新。以下链接包含更多信息:


通常推断函数更新参数的最简单方法是在您提供的示例中使用
parse
函数。

在本例中,我们可以使用
data dateCols
调用查询中的列列表

update validateSign:{x=/}each flip signum data dateCols from data
然而,我不认为这个查询会产生期望的结果,另一种选择是

update validateSign:1=(count distinct@)each flip signum data dateCols from data

Georges关于原始解决方案给出错误结果的评论是正确的,因为
{x=/}
不会告诉您列表中的所有项都相等,而是一个滚动布尔值,用于检查下一个项是否匹配零或一。像
{all x[0]=x}
这样的东西可以实现您想要的

Jemmas指出,如果列名可能不同,并且希望使用select构造,则必须使用以下形式的函数select:

q)data:([] date:10#.z.D;name:10?`4;cashType:10?`A`B;t1:-5+10?10;t2:-5+10?10;t3:-5+10?10)
q)dateCols:-3#cols data
q)![data;();0b;(1#`validateSign)!enlist ({all flip x[;0]=x};(flip signum@;enlist,dateCols))]
date       name cashType t1 t2 t3 validateSign
----------------------------------------------
2018.05.31 hjkn B        -1 4  0  0
2018.05.31 okdm A        2  0  3  0
2018.05.31 jggp A        3  -3 0  0
2018.05.31 oimo A        -1 -2 -3 1
2018.05.31 naea A        -1 4  3  0
2018.05.31 jadb B        1  0  1  0
2018.05.31 nojg A        4  4  4  1
2018.05.31 keno B        4  2  -5 0
2018.05.31 hdai B        -3 1  -5 0
2018.05.31 mfmf A        0  1  -5 0

这种在数据表上的select中索引数据表的方法不是一种好的做法。