Date: 2024-10-01

# Alphordering Numbers

#### 2024-10-01

## Numbers don’t comply with alphabetical order

`poorly_ordered` is a vector of file names of images of patient samples from different days.

    poorly_ordered
    #>  [1] "patient101-day9.png"  "patient98-day10.png"  "patient98-day9.png"
    #>  [4] "patient99-day9.png"   "patient98-day11.png"  "patient102-day11.png"
    #>  [7] "patient102-day10.png" "patient100-day11.png" "patient100-day9.png"
    #> [10] "patient101-day11.png" "patient102-day9.png"  "patient99-day10.png"
    #> [13] "patient103-day10.png" "patient103-day9.png"  "patient101-day10.png"
    #> [16] "patient100-day10.png" "patient103-day11.png" "patient99-day11.png"

How do we get this vector into order? Well, alphabetical order doesn’t work:

    sort(poorly_ordered)
    #>  [1] "patient100-day10.png" "patient100-day11.png" "patient100-day9.png"
    #>  [4] "patient101-day10.png" "patient101-day11.png" "patient101-day9.png"
    #>  [7] "patient102-day10.png" "patient102-day11.png" "patient102-day9.png"
    #> [10] "patient103-day10.png" "patient103-day11.png" "patient103-day9.png"
    #> [13] "patient98-day10.png"  "patient98-day11.png"  "patient98-day9.png"
    #> [16] "patient99-day10.png"  "patient99-day11.png"  "patient99-day9.png"

Patient 100 comes before patient 99. This is because 1 comes before 9 in alphabetical order.

## Alphordering numbers

It’s possible to alphord the numbers by prefixing them with zeroes:

    strex::str_alphord_nums(poorly_ordered)
    #>  [1] "patient101-day09.png" "patient098-day10.png" "patient098-day09.png"
    #>  [4] "patient099-day09.png" "patient098-day11.png" "patient102-day11.png"
    #>  [7] "patient102-day10.png" "patient100-day11.png" "patient100-day09.png"
    #> [10] "patient101-day11.png" "patient102-day09.png" "patient099-day10.png"
    #> [13] "patient103-day10.png" "patient103-day09.png" "patient101-day10.png"
    #> [16] "patient100-day10.png" "patient103-day11.png" "patient099-day11.png"

Having done this, the alphabetical order is the one we want:

    sort(strex::str_alphord_nums(poorly_ordered))
    #>  [1] "patient098-day09.png" "patient098-day10.png" "patient098-day11.png"
    #>  [4] "patient099-day09.png" "patient099-day10.png" "patient099-day11.png"
    #>  [7] "patient100-day09.png" "patient100-day10.png" "patient100-day11.png"
    #> [10] "patient101-day09.png" "patient101-day10.png" "patient101-day11.png"
    #> [13] "patient102-day09.png" "patient102-day10.png" "patient102-day11.png"
    #> [16] "patient103-day09.png" "patient103-day10.png" "patient103-day11.png"