KDB+/Q如何按列索引重排表列(无需指定列名)
KDB+按列索引重排列表格的实现方法
KDB+完全支持按列索引而非列名来重排列表格,不需要依赖xcols(xcols确实需要指定列名,但有更直接的索引方式)。
核心实现思路
KDB+中表格的列索引从0开始计数,你只需构造目标列的索引顺序列表,直接通过索引访问表格即可完成重排。
根据你的需求:
- 原表格列索引:0(x)、1(y)、2(z)、3(ltCt)、4(poPt)、5(kgAg)、6(xoOt)
- 目标列顺序:x、y、z、kgAg、xoOt、ltCt、poPt → 对应索引列表为
0 1 2 5 6 3 4
示例代码
// 构造原表格 t: ([] x:`today; y:`setting1; z:`model1; ltCt:41.66; poPt:367.69; kgAg:-662.89; xoOt:11347.91) // 按索引重排列 t_new: t[; 0 1 2 5 6 3 4] // 查看结果 t_new
执行后输出:
x y z kgAg xoOt ltCt poPt --------------------------------------------------- today setting1 model1 -662.89 11347.91 41.66 367.69
另一种兼容xcols的方式
如果你习惯用xcols,也可以先通过索引获取列名列表再传入:
t_new: xcols t; (cols t)[0 1 2 5 6 3 4]
这种方式和直接索引的效果完全一致,适合需要保留xcols语法的场景。
内容的提问来源于stack exchange,提问作者Cole
相关产品推荐
相关产品推荐

