panel

语法

panel(row, col, metrics, [rowLabel], [colLabel], [parallel=false])

参数

row 是一个向量,其中每个元素对应结果矩阵中的一行。

col 是一个向量,其中每个元素对应结果矩阵中的一列。

metrics 是一个或多个指标列。每个指标列产生一个矩阵。

rowLabel 是一个向量,为结果矩阵的行标签。必须升序排列,而且没有重复值。结果中仅包括 rowLabel 中指定的行。

colLabel 是一个向量,为结果矩阵的列标签。必须升序排列,而且没有重复值。结果中仅包括 colLabel 中指定的列。

parallel 是一个布尔值,表示是否并行计算。默认值为 false。

详情

将指标列按给定行与列维度进行透视操作,生成一个或多个矩阵。每一个矩阵对应一个指标列(metrics)。

panel 函数同 pivotBy 语句类似,将数据表中的数据按照两个维度重新排列。两者的不同之处在于,SQL 中,exec... pivot by... 只能指定一个指标列, 生成一个矩阵,而 panel 函数可以指定一个或多个指标列,生成一个或多个矩阵。

例子

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 面板数据生成的表中,指定的 rowcol 会自动按升序排序。

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)