如何在Q/KDB中基于变量名从表中提取列为列表?
KDB+ 动态提取表列并转为列表问题
现有如下表格:
A_1 A_2 A_3 1 2 3 4 5 6 7 8 9
需求:基于变量指定的列名,从表中提取对应列并转为列表。
尝试的代码及预期输出
x:1 exec `$"A_", string x from table
预期输出:1 4 7
已知的部分实现(得到的是表而非列表)
enlist[`$"A_", string x]#table
遇到的问题
尝试用value将上述单列表转为普通列表,但代码无效:
value enlist[`$"A_", string x]#table
解决方案
方法1:修正exec的写法
exec的列参数需要正确传入,调整后即可直接得到列表:
x:1 exec (`$"A_",string x) from table
方法2:从单列表中提取列值
如果已经通过#截取到单列表,可以通过列名索引提取列表:
colName:`$"A_",string x (colName#table)[colName]
或者更简洁的写法:
first flip enlist[`$"A_",string x]#table
方法3:使用get直接获取列
x:1 get[`table;`$"A_",string x]
说明
value无法将单列表转为普通列表的原因是:value主要用于解析字符串表达式或获取变量值,单列表本质还是表结构,必须显式提取列内的元素才能得到普通列表。
内容的提问来源于stack exchange,提问作者Shadowpulse
相关产品推荐
相关产品推荐

