我正在尝试使用简单表
创建一个包含year
列的数据透视表
q)growth:([] stock:asc 9#`goog`apple`nokia; year: 9#2015 2016 2017; returns:9?20 )
q)growth
stock year returns
------------------
apple 2015 9
apple 2016 18
apple 2017 17
goog 2015 8
goog 2016 13
goog 2017 17
nokia 2015 12
nokia 2016 12
nokia 2017 2
但是我无法获得正确的结构,它仍然返回一个字典而不是多个year
列。
q)exec (distinct growth`year)#year!returns by stock:stock from growth
stock|
-----| ----------------------
apple| 2015 2016 2017!9 18 17
goog | 2015 2016 2017!8 13 17
nokia| 2015 2016 2017!12 12 2
我做错了什么?
答案 0 :(得分:3)
您需要将年份转换为符号才能将它们用作列标题。在这种情况下,我先更新了growth
表,然后执行了数据透视表:
q)exec distinct[year]#year!returns by stock:stock from update `$string year from growth
stock| 2015 2016 2017
-----| --------------
apple| 12 8 10
goog | 1 9 11
nokia| 5 6 1
此外,您可能会发现我已从distinct[year]
更改为(distinct growth`year)
,因为从更新的表中提取year
会产生相同的结果。
答案 1 :(得分:2)
KDB中表的列名应该是符号而不是任何其他数据类型。
在您的数据透视表中,'年'的数据类型column是int \ long这是正确的表没有出现的原因。
如果你输入它作为符号,那么它将起作用。
q)growth:([] stock:asc 9#`goog`apple`nokia; year: 9#2015 2016 2017; returns:9?20 )
q)growth:update `$string year from growth
q)exec (distinct growth`year)#year!returns by stock:stock from growth
stock| 2015 2016 2017
-----| --------------
apple| 9 18 17
goog | 8 13 17
nokia| 12 12 2
或者,您可以将数据透视列切换为' stock'而不是' year'并获得一个包含相同原始表的数据透视表。
q)growth:([] stock:asc 9#`goog`apple`nokia; year: 9#2015 2016 2017; returns:9?20 )
q)show exec (distinct growth`stock)#stock!returns by year:year from growth
year| apple goog nokia
----| ----------------
2015| 4 2 4
2016| 5 13 12
2017| 12 6 1