按索引 KDB+/Q 重新排序列 (xcol)

问题描述 投票:0回答:2

我在 KDB+ 中有一个表,我需要对其列重新排序,但不是按名称、按索引。我的意思是,在下面的示例表中,我不知道列名称是“ltCt”、“poPt”、“kgAg”、“xoOt”,我所知道的是第 6 列需要是第 4 列列,第 7 列需要是第 5 列,依此类推,我需要据此重新排序。

是否可以在 KDB+ 中对这样的列重新排序?我的理解是 xcols 似乎需要列名。

    x         y        z            ltCt     poPt     kgAg     xoOt   
    ---------------------------------------------------------------------
    today     setting1 model1       41.66    367.69   -662.89  11347.91 

理想的输出格式:

    x         y        z             kgAg      xoOt       ltCt   poPt     
    ---------------------------------------------------------------------
    today     setting1 model1       -662.89    11347.91   41.66  367.69
multiple-columns kdb
2个回答
0
投票

您可以使用关键字

cols
来提取列列表:

q)cols tab
`x`y`z`ltCt`poPt`kgAg`xoOt

然后,您可以使用关键字

rank
后跟索引列表来重新排序列列表:

q)cols[tab] rank 0 1 2 5 6 3 4
`x`y`z`kgAg`xoOt`ltCt`poPt

最后将其与您的桌子一起放入

xcols
中:

q)(cols[tab] rank 0 1 2 5 6 3 4) xcols tab

https://code.kx.com/q/ref/cols/

https://code.kx.com/q/ref/rank/


0
投票

上面的答案很好!只是好奇,你需要排名吗?

q)(rank 0 1 2 5 6 3 4)~0 1 2 5 6 3 4
1b
q)(cols[tab] 0 1 2 5 6 3 4) xcols tab
x       y          z        kgAg    xo0t     ltCt  poPt
---------------------------------------------------------
"today" "setting1" "model1" -662.89 11347.91 41.66 367.69
© www.soinside.com 2019 - 2024. All rights reserved.