按行权重排序同频次彩票号码的Excel公式优化需求
修改Excel公式实现频次+首次行号排序
原公式已经完成了号码频次统计和降序排序,但缺少相同频次下按首次出现行号升序的二次排序逻辑,以下是修改后的公式及说明:
=LET( data, A1:F27, flatten, TEXTSPLIT(TEXTJOIN(";",,data),,";"), numUq, UNIQUE(flatten), -- 获取每个唯一号码的出现频次 freq, DROP(FREQUENCY(XMATCH(flatten, numUq), UNIQUE(XMATCH(flatten, numUq))), -1), -- 获取每个唯一号码首次出现的行号(取最小行号) firstRow, MAP(numUq, LAMBDA(x, MIN(ROW(data)*(data=x)))), -- 按「频次降序→首次行号升序」排序 SORT(HSTACK(numUq, freq, firstRow), {2,3}, {-1,1}) )
关键修改点:
- 新增
data变量统一引用数据区域,方便后续维护 - 新增
firstRow变量:通过MAP遍历每个唯一号码,用ROW(data)*(data=x)标记出该号码出现的所有行号,再取最小值得到首次出现的行号 - 修改
SORT的排序参数:{2,3}指定按第2列(频次)和第3列(首次行号)排序,{-1,1}对应频次降序、行号升序的规则
如果不需要保留首次行号列,可以在最后套一层DROP去掉第3列:
=LET( data, A1:F27, flatten, TEXTSPLIT(TEXTJOIN(";",,data),,";"), numUq, UNIQUE(flatten), freq, DROP(FREQUENCY(XMATCH(flatten, numUq), UNIQUE(XMATCH(flatten, numUq))), -1), firstRow, MAP(numUq, LAMBDA(x, MIN(ROW(data)*(data=x)))), DROP(SORT(HSTACK(numUq, freq, firstRow), {2,3}, {-1,1}),,3) )
这样就能实现示例中13和35频次相同时,13因首次出现行号更靠前而排在前面的需求。
内容的提问来源于stack exchange,提问作者IntoTheDeep
相关产品推荐
相关产品推荐

