【问题标题】:R: unexpected natural sorting by gtools mixedsortR:gtools 混合排序的意外自然排序
【发布时间】:2021-11-22 02:25:46
【问题描述】:

我只是在 gtools::mixedsort 中发现了一些意想不到的行为,看看我的输出是如何自然排序的。

我有一个这样的例子:

aa=c("CD57","CD58","CD158","CD158b","CD158e","CD158e1","CD319","CD335")
gtools::mixedsort(aa)

我的预期结果是:

[1] "CD57"    "CD58"    "CD158"   "CD158b"  "CD158e"  "CD158e1" "CD319"
[8] "CD335"

但是我得到了这个:

[1] "CD57"    "CD58"    "CD158"   "CD158b"  "CD158e"  "CD319"   "CD335"
[8] "CD158e1"

这是正确的吗?是什么原因?

【问题讨论】:

    标签: r sorting vector natural-sort


    【解决方案1】:

    CD158e1 在这里被视为1580,因为:

    >>> 158e1
    1580.0
    >>> 
    

    158e1 是带有e 的欧拉数,所以它会多出一个0e2 会多出2 个,依此类推...

    这就是为什么它被解析为列表中的最后一个。


    the documentation of mixedsort中所述:

    这些函数对包含嵌入的字符串进行排序或排序 数字,以便数字按数字排序而不是排序 按字符值。 IE。 “阿司匹林 50mg”将出现在“阿司匹林”之前 100mg”。另外,字符串的大小写被忽略,因此“a”, 将出现在“B”和“C”之前。

    【讨论】:

    • @DaniCee 是的! :)
    • @DaniCee 现在添加了更多信息 :)
    • 我想没有办法避免这种行为吧?
    • @DaniCee 看看这个,*.com/questions/60358347/…