如何通过 sym 删除前 252 行?
How can I drop the first 252 rows by sym?
我有一个 table 带有 sym-date 索引。
我试图恢复相同的 table,但跳过每个符号的前 252 行。
我预计会是:
ungroup 252_select by sym from t
但这不起作用。我做错了什么?
您正在寻找这样的东西
select from t where 252<=(rank;i) fby sym
其中 rank
returns 排序列表中的位置, fby
用于在 sym[=20] 上拆分时将此函数应用于 i
的每个子集=]
您的尝试失败的原因
select by sym from t
returns 每个符号只有最后一行
- 因此,当您使用
252_
删除行时,您将删除最后 252 行
ungroup
可能会失败,因为您有两列或更多列具有不同长度的向量元素
如果您想通过 ungroup
执行此操作,您可以使用 xgroup
执行以下操作以保留分组中的所有行
ungroup 252_/:/:`sym xgroup t
我想出了一个公认的更复杂的解决方案:
t:([] date:.z.D+til 1008;sym:(504#`A),(504#`B);px:1008?1.0); / test table
s:252; / # of elements to skip
ungroup (key tt)!{flip (x)_flip y}/: [s;tt[key tt:?[t;();((,)`sym)!(,)`sym;`date`px!`date`px]]]
逻辑涉及:
- 按
sym
分组
- 正在将结果分配给 table
tt
- 逐一处理分组字典
- 重构table
现在,我最初尝试与上面提出的 fby
解决方案进行基准测试,针对非常小的 table 进行测试,使用 fby
的解决方案快 50%:
t:([] date:.z.D+til 10;sym:(5#`A),(5#`B);px:10?1.0);
s:2;
\t:100000 ungroup (key tt)!{flip (x)_flip y}/: [s;tt[key tt:?[t;();((,)`sym)!(,)`sym;`sym`px!`sym`px]]]
796
\t:100000 select from t where s<=(rank;i) fby sym
396
但是,当使用开始时提出的更大table(总共1008行,每个代码跳过前252行)时,性能排名发生变化:
\t:100000 select from t where s<=(rank;i) fby sym
2384
\t:100000 ungroup (key tt)!{flip (x)_flip y}/: [s;tt[key tt:?[t;();((,)`sym)!(,)`sym;`sym`px!`sym`px]]]
1679
select from t where 1=({x>252};i) fby sym
我有一个 table 带有 sym-date 索引。
我试图恢复相同的 table,但跳过每个符号的前 252 行。
我预计会是:
ungroup 252_select by sym from t
但这不起作用。我做错了什么?
您正在寻找这样的东西
select from t where 252<=(rank;i) fby sym
其中 rank
returns 排序列表中的位置, fby
用于在 sym[=20] 上拆分时将此函数应用于 i
的每个子集=]
您的尝试失败的原因
select by sym from t
returns 每个符号只有最后一行- 因此,当您使用
252_
删除行时,您将删除最后 252 行 ungroup
可能会失败,因为您有两列或更多列具有不同长度的向量元素
如果您想通过 ungroup
执行此操作,您可以使用 xgroup
执行以下操作以保留分组中的所有行
ungroup 252_/:/:`sym xgroup t
我想出了一个公认的更复杂的解决方案:
t:([] date:.z.D+til 1008;sym:(504#`A),(504#`B);px:1008?1.0); / test table
s:252; / # of elements to skip
ungroup (key tt)!{flip (x)_flip y}/: [s;tt[key tt:?[t;();((,)`sym)!(,)`sym;`date`px!`date`px]]]
逻辑涉及:
- 按
sym
分组
- 正在将结果分配给 table
tt
- 逐一处理分组字典
- 重构table
现在,我最初尝试与上面提出的 fby
解决方案进行基准测试,针对非常小的 table 进行测试,使用 fby
的解决方案快 50%:
t:([] date:.z.D+til 10;sym:(5#`A),(5#`B);px:10?1.0);
s:2;
\t:100000 ungroup (key tt)!{flip (x)_flip y}/: [s;tt[key tt:?[t;();((,)`sym)!(,)`sym;`sym`px!`sym`px]]]
796
\t:100000 select from t where s<=(rank;i) fby sym
396
但是,当使用开始时提出的更大table(总共1008行,每个代码跳过前252行)时,性能排名发生变化:
\t:100000 select from t where s<=(rank;i) fby sym
2384
\t:100000 ungroup (key tt)!{flip (x)_flip y}/: [s;tt[key tt:?[t;();((,)`sym)!(,)`sym;`sym`px!`sym`px]]]
1679
select from t where 1=({x>252};i) fby sym