Строки отсортированы по алфавиту. Мы можем проверить последовательность порядка, который вы наблюдаете, изменив строки чисел на строки букв, где 0 - это a, 1 - это b и т. Д.:
x <- c("5", "12", "7")
y <- c("1","12","13","14","15","10","38","19", "60")
digit_to_letter = function(x) {
x = strsplit(x, "")
lets = lapply(x, function(d) letters[as.integer(d) + 1])
sapply(lets, paste, collapse = "")
}
Связывая исходные числовые строки с их «эквивалентными» буквами и затем сортируя, мы можем видеть, что наблюдаемый вами порядок такой же, как и в обычном алфавитном порядке, только для чисел. Аналогично, min и max соответствуют алфавитному порядку. Возможно, вы заметили похожий порядок, например, в каталоге на вашем компьютере, если у вас есть файлы с именами, которые начинаются с цифр.
x_example = cbind(x, digit_to_letter(x))
y_example = cbind(y, digit_to_letter(y))
x_example[order(x), ]
# x
# [1,] "12" "bc"
# [2,] "5" "f"
# [3,] "7" "h"
y_example[order(y), ]
# y
# [1,] "1" "b"
# [2,] "10" "ba"
# [3,] "12" "bc"
# [4,] "13" "bd"
# [5,] "14" "be"
# [6,] "15" "bf"
# [7,] "19" "bj"
# [8,] "38" "di"
# [9,] "60" "ga"
Если вы хотите использовать числа в качестве чисел, используйте as.numeric()
или as.integer()
для преобразования числовых строк в более подходящий класс.
Один последний пример, чтобы проиллюстрировать немного лучше:
z = as.character(c(1, 2, 10, 12, 100, 101, 121, 1000, 9))
cbind(z, digit_to_letter(z))[order(z), ]
# z
# [1,] "1" "b"
# [2,] "10" "ba"
# [3,] "100" "baa"
# [4,] "1000" "baaa"
# [5,] "101" "bab"
# [6,] "12" "bc"
# [7,] "121" "bcb"
# [8,] "2" "c"
# [9,] "9" "j"