panel
语法
panel(row, col, metrics, [rowLabel], [colLabel], [parallel=false])
详情
将指标列按给定行与列维度进行透视操作,生成一个或多个矩阵。每一个矩阵对应一个指标列(metrics)。
panel
函数同 pivotBy
语句类似,将数据表中的数据按照两个维度重新排列。两者的不同之处在于,SQL 中,exec... pivot by... 只能指定一个指标列, 生成一个矩阵,而
panel
函数可以指定一个或多个指标列,生成一个或多个矩阵。
参数
row 是一个向量,其中每个元素对应结果矩阵中的一行。
col 是一个向量,其中每个元素对应结果矩阵中的一列。
metrics 是一个或多个指标列。每个指标列产生一个矩阵。
rowLabel 是一个向量,为结果矩阵的行标签。必须升序排列,而且没有重复值。结果中仅包括 rowLabel 中指定的行。
colLabel 是一个向量,为结果矩阵的列标签。必须升序排列,而且没有重复值。结果中仅包括 colLabel 中指定的列。
parallel 是一个布尔值,表示是否并行计算。默认值为 false。
返回值
一个或多个矩阵。
例子
t = table(1 1 2 2 2 3 3 as id, 2020.09.01 + 1 3 1 2 3 2 3 as date, 1..7 as value);
t;
id | date | value |
---|---|---|
1 | 2020.09.02 | 1 |
1 | 2020.09.04 | 2 |
2 | 2020.09.02 | 3 |
2 | 2020.09.03 | 4 |
2 | 2020.09.04 | 5 |
3 | 2020.09.03 | 6 |
3 | 2020.09.04 | 7 |
panel
面板数据生成的表中,指定的 row 和 col
会自动按升序排序。
panel(t.date, t.id, t.value);
1 | 2 | 3 | |
---|---|---|---|
2020.09.02 | 1 | 3 | |
2020.09.03 | 4 | 6 | |
2020.09.04 | 2 | 5 | 7 |
panel(t.date, t.id, t.value, 2020.09.02 2020.09.03, 1 2);
1 | 2 | |
---|---|---|
2020.09.02 | 1 | 3 |
2020.09.03 | 4 |
panel(t.date, t.id, [t.value, t.value>0], 2020.09.02 2020.09.03, 1 2);
1 | 2 | |
---|---|---|
2020.09.02 | 1 | 3 |
2020.09.03 | 4 |
1 | 2 | |
---|---|---|
2020.09.02 | 1 | 1 |
2020.09.03 | 1 |
利用panel
生成的矩阵,计算每只股票的累积最大股价。
syms = "sym"+string(1..2)
dates = 2021.12.07..2021.12.11
t = table(loop(take{, size(syms)}, dates).flatten() as trade_date, take(syms, size(syms)*size(dates)) as code, rand(1000, (size(syms)*size(dates))) as volume)
volume = panel(t.trade_date, t.code, t.volume, dates)
cummax(volume)