KDB中能否将时间类型用作表的列?附透视表实践问题
KDB中能否将时间类型用作透视表的列?
KDB完全支持将时间类型作为表的列名,你当前的代码没有得到预期透视表效果,是因为写法没有将字典展开为多列,而非时间类型不能作为列名。
问题原因
你执行的代码返回的是分组后的字典列,每个k对应一个以时间为键的字典,而非将时间直接作为表的独立列。
正确实现透视表的代码
要生成以时间为列名的透视表,只需将字典列展开并与分组键列合并:
t:([]k:1 2 3 2 3;p:09:00 09:30 10:00 09:00 09:30; v:10 20 30 40 50) P:asc exec distinct p from t; // 生成透视表:将字典列展开为时间列,合并到k列所在的表 ([]k:exec distinct k from t) , flip exec P#(p!v) by k from t
执行后会得到预期的透视表:
k| 09:00 09:30 10:00 -| ------------------ 1| 10 0N 0N 2| 40 20 0N 3| 0N 50 30
关于时间类型列名的说明
- 时间类型作为列名是合法的,KDB允许用任意原子类型(符号、时间、整数、日期等)作为列名。
- 访问时间类型列时,不能用
.语法(如t.09:00),需用下标语法t[09:00];如果希望用.访问,可将时间转为符号类型(如exec$string p from t`)。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

