对给定 table 中的多个列取消分组
Ungroup over more than one columns in a given table
此处提供的答案应该适用于许多专栏,
how to use ungroup with multiple composite columns in kdb
但事实并非如此。对于像这样的情况:
tb:([] x: 0 1 10; y:(1 1; 2 2 2; enlist 3); z:("kk";"ttt"; enlist "j");w:("cc";"bbbb";enlist "a")
ungroup1: {[col;tbl] @[tbl where count each tbl col;col;:;raze tbl col]}
这会起作用:
q)ungroup1[`y;tb]
x y z w
-----------------
0 1 "kk" "cc"
0 1 "kk" "cc"
1 2 "ttt" "bbbb"
1 2 "ttt" "bbbb"
1 2 "ttt" "bbbb"
10 3 ,"j" ,"a"
```q
Again based on single column,
```q
q)ungroup1[`z;tb]
x y z w
-----------------
0 1 1 k "cc"
0 1 1 k "cc"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
10 ,3 j ,"a"
这行不通(引发 'length
):
ungroup1[`y`z;tb]
想要的结果:
x y z w
------------
0 1 k "cc"
0 1 k "cc"
1 2 t "bbbb"
1 2 t "bbbb"
1 2 t "bbbb"
10 3 j ,"a"
我可以听听专家的一些意见吗
由于取消分组是作为 raze flip each t
实现的,您可以复制该方法,但排除(并重新加入)您 不想 取消分组的列。
q)raze{key[y]#flip[x _y],\:(x:(),x)#y}[`w]each tb
x y z w
-------------
0 1 k "cc"
0 1 k "cc"
1 2 t "bbbb"
1 2 t "bbbb"
1 2 t "bbbb"
10 3 j ,"a"
q)raze{key[y]#flip[x _y],\:(x:(),x)#y}[`y`w]each tb
x y z w
-----------------
0 1 1 k "cc"
0 1 1 k "cc"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
10 ,3 j ,"a"
假设您选择取消分组的列实际上是可取消分组的(也就是具有匹配的长度)
此处提供的答案应该适用于许多专栏, how to use ungroup with multiple composite columns in kdb
但事实并非如此。对于像这样的情况:
tb:([] x: 0 1 10; y:(1 1; 2 2 2; enlist 3); z:("kk";"ttt"; enlist "j");w:("cc";"bbbb";enlist "a")
ungroup1: {[col;tbl] @[tbl where count each tbl col;col;:;raze tbl col]}
这会起作用:
q)ungroup1[`y;tb]
x y z w
-----------------
0 1 "kk" "cc"
0 1 "kk" "cc"
1 2 "ttt" "bbbb"
1 2 "ttt" "bbbb"
1 2 "ttt" "bbbb"
10 3 ,"j" ,"a"
```q
Again based on single column,
```q
q)ungroup1[`z;tb]
x y z w
-----------------
0 1 1 k "cc"
0 1 1 k "cc"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
10 ,3 j ,"a"
这行不通(引发 'length
):
ungroup1[`y`z;tb]
想要的结果:
x y z w
------------
0 1 k "cc"
0 1 k "cc"
1 2 t "bbbb"
1 2 t "bbbb"
1 2 t "bbbb"
10 3 j ,"a"
我可以听听专家的一些意见吗
由于取消分组是作为 raze flip each t
实现的,您可以复制该方法,但排除(并重新加入)您 不想 取消分组的列。
q)raze{key[y]#flip[x _y],\:(x:(),x)#y}[`w]each tb
x y z w
-------------
0 1 k "cc"
0 1 k "cc"
1 2 t "bbbb"
1 2 t "bbbb"
1 2 t "bbbb"
10 3 j ,"a"
q)raze{key[y]#flip[x _y],\:(x:(),x)#y}[`y`w]each tb
x y z w
-----------------
0 1 1 k "cc"
0 1 1 k "cc"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
1 2 2 2 t "bbbb"
10 ,3 j ,"a"
假设您选择取消分组的列实际上是可取消分组的(也就是具有匹配的长度)