【问题标题】:Strange behavior with gtools::mixedsort package in RR 中 gtools::mixedsort 包的奇怪行为
【发布时间】:2020-02-23 01:15:52
【问题描述】:

我喜欢使用 gtools 包中的混合排序/排序功能来进行字母数字排序。但是,我遇到了一种非常奇怪的行为,在某些情况下,它不适用于字符 E。请参阅一些示例。有人能帮我吗 ?怎么了?

正确排序:

> mixedsort(c("P0A1","P0B1","P0C1","P0D1","P0G1","P0F1"))
[1] "P0A1" "P0B1" "P0C1" "P0D1" "P0F1" "P0G1"

字符 E 的排序错误:

> mixedsort(c("P0A1","P0E1","P0C1","P0D1","P0G1","P0F1"))
[1] "P0E1" "P0A1" "P0C1" "P0D1" "P0F1" "P0G1"

字符 E 的正确排序:

> mixedsort(c("PA1","PE1","PC1","PD1","PG1","PF1"))
[1] "PA1" "PC1" "PD1" "PE1" "PF1" "PG1"

【问题讨论】:

    标签: r sorting alphanumeric


    【解决方案1】:

    在R中0E1是浮点0:

    0E1
    ## [1] 0
    

    看来你需要给它一些帮助。在最后一个非数字后插入一个空格,排序然后删除。

    sub(" ", "", mixedsort(sub("^(.*\\D)", "\\1 ", x)))
    ## [1] "P0A1" "P0C1" "P0D1" "P0E1" "P0F1" "P0G1"
    

    【讨论】:

    • 如果这是原因,请向gtools 的维护者报告 - 我确定他们想知道并至少记录这个“功能”,或者更好的是提供解决方法。
    • 感谢您的洞察力。可以通过在两者之间添加一个 _ 字符来修复它:“P0_A1”。将与开发者沟通,谢谢。
    猜你喜欢
    • 2016-09-28
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 2021-11-21
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多