R语言gtools包mixedsort自然排序结果不符合预期问题咨询
问题解答
排序结果是否符合设计逻辑
是,你看到的实际输出完全符合gtools包mixedsort函数的默认设计逻辑。
差异产生的原因
核心原因是mixedsort默认开启了科学计数法数值识别规则:
它会自动将字符串中符合[数字]e[数字]格式的片段识别为科学计数法表示的整体数值,而非拆分为「数字+字母e+数字」三个独立的排序片段。
对应你的测试用例,各个字符串的排序权重计算逻辑如下:
CD57:拆分结果为 字符串前缀CD + 数值57CD58:拆分结果为 字符串前缀CD + 数值58CD158:拆分结果为 字符串前缀CD + 数值158CD158b:拆分结果为 字符串前缀CD + 数值158 + 字符串后缀bCD158e:拆分结果为 字符串前缀CD + 数值158 + 字符串后缀eCD319:拆分结果为 字符串前缀CD + 数值319CD335:拆分结果为 字符串前缀CD + 数值335CD158e1:158e1被识别为科学计数法数值158*10^1=1580,拆分结果为 字符串前缀CD + 数值1580
数值维度排序为57 < 58 < 158 < 319 < 335 < 1580,相同数值前缀的字符串按后缀字典序排序,因此最终输出顺序和你拿到的实际结果一致。
实现预期排序的方法
如果需要得到你预期的自然排序结果,关闭科学计数法识别即可:
gtools::mixedsort(aa, scientific = FALSE)
运行后输出就是你需要的顺序:
[1] "CD57" "CD58" "CD158" "CD158b" "CD158e" "CD158e1" "CD319" [8] "CD335"
内容的提问来源于stack exchange,提问作者DaniCee
相关产品推荐
相关产品推荐

