将KDB中的单列拆分为多列

将KDB中的单列拆分为多列,kdb,Kdb,我想在应用复杂函数后将一列中的值拆分为多列 e、 g.对于下面的交易表t,我想将sym拆分为两个单独的列sym和src。然而,我将要应用的函数将稍微复杂一些 q)t:([] time:10:01:01 10:01:03 10:01:04;sym:`goog.l`vod.l`apple.o;qty:100 200 150) time sym qty -------------------- 10:01:01 goog.l 100 10:01:03 vod.l 200 10:0

我想在应用复杂函数后将一列中的值拆分为多列

e、 g.对于下面的交易表t,我想将sym拆分为两个单独的列sym和src。然而,我将要应用的函数将稍微复杂一些

q)t:([] time:10:01:01 10:01:03 10:01:04;sym:`goog.l`vod.l`apple.o;qty:100 200 150)
time     sym     qty
--------------------
10:01:01 goog.l  100
10:01:03 vod.l   200
10:01:04 apple.o 150

实现这一目标的方法之一是:

q)update sym:sym[;0] , mkt:sym[;1] from update ` vs/:sym from t
time     sym   qty mkt
----------------------
10:01:01 goog  100 l  
10:01:03 vod   200 l  
10:01:04 apple 150 o  
如果您对表中需要拆分的列以外的任何其他列不感兴趣,那么

q)exec  {`s`mkt!` vs x}each sym  from t
s     mkt
---------
goog  l  
vod   l  
apple o  
您可以通过在上拆分来创建sym和src表格。创建字典,然后使用flip创建表格:

q)show r:exec flip`sym`src!flip` vs/:sym from t
sym   src
---------
goog  l
vod   l
apple o
可以使用以下方法将其连接到原始表:

如果列顺序很重要,则可通过以下方式解决:


如果您的表格非常大,并且sym列非常重复(如果是勾号数据,则看起来会重复),那么以下操作会快得多:

f:{` vs'x}
@[t;`col1`col2;:;flip .Q.fu[f]t`sym]

另一个选择是

q)(,'/)(t;flip`sym`src!exec flip ` vs'sym from t)
time     sym   qty src
----------------------
10:01:01 goog  100 l
10:01:03 vod   200 l
10:01:04 apple 150 o

抱歉,这和托马斯的回答差不多
f:{` vs'x}
@[t;`col1`col2;:;flip .Q.fu[f]t`sym]
q)(,'/)(t;flip`sym`src!exec flip ` vs'sym from t)
time     sym   qty src
----------------------
10:01:01 goog  100 l
10:01:03 vod   200 l
10:01:04 apple 150 o