如何在kdb中使用ungroup与多个复合列

时间:2016-09-04 07:19:55

标签: kdb

考虑下表:

`Keys  `Values
`A`B   `V1`V2
`C`D`E   `V1`V2`V3`V4

我想仅展开Keys列,以便将每个键映射到相应的值。结果应该是:

`Keys  `Values
`A     `V1`V2
`B     `V1`V2
`C     `V1`V2`V3`V4
`D     `V1`V2`V3`V4
`E     `V1`V2`V3`V4

ungroup函数将ungroup应用于所有列,在这种情况下,我想单独应用于Keys列。

1 个答案:

答案 0 :(得分:3)

你可以采取几种不同的方式,下面是一种方式 -

ungroupCol:{[tbl;col]
    @[tbl where count each tbl col;col;:;raze tbl col]
}

然后:

q)t:flip `Keys`Values!((`A`B;`C`D`E);(`V1`V2;`V1`V2`V3`V4))
q)ungroupCol[t;`Keys]
    Keys Values
    -----------------
    A    `V1`V2
    B    `V1`V2
    C    `V1`V2`V3`V4
    D    `V1`V2`V3`V4
    E    `V1`V2`V3`V4