Kdb 通过在行组外创建列来转换表

Kdb 通过在行组外创建列来转换表,kdb,k,Kdb,K,我有一个表,其中包含按名称分组的时间序列数据(缺少一些日期),并且希望通过为包含该组数据的每个组创建一列来转换该表。换句话说,我该如何从这开始呢 x:([] name:`a`a`a`b`b`c`c;date:2000.01.01 2000.01.02 2000.01.03 2000.01.01 2000.01.02 2000.01.02 2000.01.03;val:1 2 3 1 2 3 1) 这个 ([] date:2000.01.01 2000.01.02 2000.01.03;a:1

我有一个表,其中包含按名称分组的时间序列数据(缺少一些日期),并且希望通过为包含该组数据的每个组创建一列来转换该表。换句话说,我该如何从这开始呢

x:([] name:`a`a`a`b`b`c`c;date:2000.01.01 2000.01.02 2000.01.03 2000.01.01 2000.01.02 2000.01.02 2000.01.03;val:1 2 3 1 2 3 1)
这个

([] date:2000.01.01 2000.01.02 2000.01.03;a:1 2 3;b:1 2 0N;c:0N 3 1)

您希望透视数据:

q)t:([] name:`a`a`a`b`b`c`c;date:2000.01.01 2000.01.02 2000.01.03 2000.01.01 2000.01.02 2000.01.02 2000.01.03;val:1 2 3 1
2 3 1)
q)t
name date       val
-------------------
a    2000.01.01 1
a    2000.01.02 2
a    2000.01.03 3
b    2000.01.01 1
b    2000.01.02 2
c    2000.01.02 3
c    2000.01.03 1

q)P:asc exec distinct name from t // get distinct pivot items
q)P
`s#`a`b`c

q)pvt:exec P!(name!val)P by date:date from t
q)pvt
date      | a b c
----------| -----
2000.01.01| 1 1
2000.01.02| 2 2 3
2000.01.03| 3   1

q)u:([date:2000.01.01 2000.01.02 2000.01.03] a:1 2 3;b:1 2 0N;c:0N 3 1)
q)pvt~u
1b
kx网站逐步介绍了一个简单的示例和一个更通用的解决方案: