KDB技术疑问:如何选取以数字开头命名的列?
解决kdb+中数字开头列名的选取问题
我来帮你搞定这个数字开头列名的选取难题~先理清楚核心问题,再给你几个可行的方案:
为什么你的enlist(1CODE)#t`没效果?
kdb+里对符号的命名有严格规则:以数字开头的符号不能直接用1CODE这种写法,因为q会把它解析成「数字1 × 变量CODE」,而不是你想要的列名符号1CODE。正确的数字开头符号字面量应该用"1CODE"的形式来定义(反引号+字符串)。
可行的解决方案
1. 用正确的符号字面量选取列
先确认你的列名符号格式:执行cols t,返回的应该是类似("1CODE";"2CODE";"3CODE";"4CODE")的符号列表。这时用以下语句选取目标列:
- 单列选取:
enlist(`"1CODE") # t - 多列选取:
(`"1CODE";`"2CODE") # t - 用select语句更直观:
select `"1CODE", `"2CODE from t
2. 如果透视结果是字典(类型99h)
如果你的透视操作返回的是字典(用type t返回99h),先把它转成表再处理:
t_table: flip t // 将字典转为表 enlist(`"1CODE") # t_table
或者直接从字典中提取对应值:
t[`"1CODE"] // 获取字典中`1CODE`对应的序列
3. 提前规范透视生成的列名
如果是透视过程中生成的数字开头列名,建议用字符串拼接+转符号的方式生成,避免后续麻烦:
// 示例:生成带数字前缀的列名符号 col_names: `$(string each 1 2 3 4),\:"CODE" // 后续透视时用这个列名列表
内容的提问来源于stack exchange,提问作者Jason_L
相关产品推荐
相关产品推荐

