如何根据值将记录平均划分为N组



对于如下表,如何根据"factor_value"的值将这些记录平均划分为3组?

sym    date       factor_value
------ ---------- ------------
100000 2022.04.27 1           
100001 2022.04.27 2           
100002 2022.04.27 3           
100003 2022.04.27 4           
100004 2022.04.27 5           
100005 2022.04.27 6           
100006 2022.04.27 7           
100007 2022.04.27 8           
100008 2022.04.27 9           
100009 2022.04.27 10          
100010 2022.04.28             
100000 2022.04.28             
100001 2022.04.28             
100002 2022.04.28 3           
100003 2022.04.28 4           
100004 2022.04.28 5           
100005 2022.04.28 6           
100006 2022.04.28 7           
100007 2022.04.28 8           
100008 2022.04.28 9

这可以通过DolphinDB函数cutPointsasof来实现。

sym=take(string(100000..100010),20)
date=sort(take(2022.04.27..2022.04.28,20))
factor_value= 1..10 join take(int(),3) join 3..9
tb= table( sym, date, factor_value)
select *,asof(cutPoints(int(factor_value*100000),3),factor_value*100000)+1 as factor_quantile from tb context by date  csort  factor_value having  size(distinct(factor_value*100000))>3 

首先,使用contexy bycsort对列factor_value进行排序。然后用cutPoints将记录平均分配到3组中。CCD_ 6返回组中每个元素的分组号。

输出:

sym    date       factor_value factor_quantile
------ ---------- ------------ ---------------
100000 2022.04.27 1            1              
100001 2022.04.27 2            1              
100002 2022.04.27 3            1              
100003 2022.04.27 4            1              
100004 2022.04.27 5            2              
100005 2022.04.27 6            2              
100006 2022.04.27 7            2              
100007 2022.04.27 8            3              
100008 2022.04.27 9            3              
100009 2022.04.27 10           3              
100010 2022.04.28              1              
100000 2022.04.28              1              
100001 2022.04.28              1              
100002 2022.04.28 3            1              
100003 2022.04.28 4            2              
100004 2022.04.28 5            2              
100005 2022.04.28 6            2              
100006 2022.04.28 7            3              
100007 2022.04.28 8            3              
100008 2022.04.28 9            3   

最新更新