我是KDB和Q的新手。
我在Q For Mortals中阅读了以下内容,并推断出KDB支持复合列。
在嵌套列中,所有项目都是相同类型的简单列表的情况在kdb +中特别处理。我们称其为复合列。不需要所有简单列表都具有相同的长度。
我知道可以在表中创建一个新列,如下所示: tablename: update newcol:value from tablename
当我将值设置为另一列或使用其他列或常量值进行某些计算时,它可以正常工作,并在表中使用适当设置的值创建新列。但是,当我尝试将值设置为列表时,它不起作用:tablename: update newcol: (1 2) from tablename
给出“长度”错误。
我浏览了Q For Mortals中的文档,但无法弄清楚如何创建这样的复合列。请帮助我创建一个存储列表的列。谢谢!
没有看到示例,这很可能是因为q试图将其用作与表长度不1 2
一样的值newcol
。要强制列表本身作为表中的每个条目,您需要有适当数量的值。您可以使用虚拟列i
和实现此目的enlist
。
q)tab:([]time:5#.z.d;col1:1 2 3 4 5)
q)tab
time col1
---------------
2020.07.17 1
2020.07.17 2
2020.07.17 3
2020.07.17 4
2020.07.17 5
q)update col2:1 2 from tab
'length
q)show tab:update col2:count[i]#enlist 1 2 from tab
time col1 col2
--------------------
2020.07.17 1 1 2
2020.07.17 2 1 2
2020.07.17 3 1 2
2020.07.17 4 1 2
2020.07.17 5 1 2
q)meta tab
c | t f a
----| -----
time| d
col1| j
col2| J
该表的元数据包含col2的大写字母J,指示每个条目都是多头列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句