分隔 kdb 中的记录 table

separating the records in a kdb table

有一个 table 包含一个列,我想将其分成多个记录。例如

q)tab:([]a:1 2 3;b:(`a;`$"b c";`d);c:2 3 4)
q)tab
a b   c
-------
1 a   2
2 b c 3
3 d   4

b列的第二个条目中bc之间有一个space,我希望table成为

a b c
-----
1 a 2
2 b 3
2 c 3
3 d 4

我试过了

" " string vs exec b from tab

但没用。

有什么想法吗?

您通常会使用 ungroup:

q)ungroup([]a:1 2 3;b:((),`a;`b`c;(),`d);c:2 3 4)
a b c
-----
1 a 2
2 b 3
2 c 3
3 d 4

由于b是每行有多个条目的列,您可以计算每个值并相应地扩展相应的行条目。然后ungroup就像特里提到的那样应该可以。

q)t:([]a:1 2 3;b:(`a;`b`c;`d);c:2 3 4)
q)![t;();0b;{x!(enlist({(count each x)#'y};`b)),/:x}cols t]
a   b    c
------------
,1  ,`a  ,2
2 2 `b`c 3 3
,3  ,`d  ,4
q)ungroup ![t;();0b;{x!(enlist({(count each x)#'y};`b)),/:x}cols t]
a b c
-----
1 a 2
2 b 3
2 c 3
3 d 4

编辑:在您发表评论后意识到输入不同。我想这就是你想要的。

q)t:([]a:1 2 3;b:(`a;`$"b c";`d);c:2 3 4)
q)ungroup update`$" "vs'string b from t
a b c
-----
1 a 2
2 b 3
2 c 3
3 d 4