Я думаю, вам нужна функция типа sort_by
в пакете funprog
.
library(stringr)
library(funprog)
f <- function(x) as.numeric(str_extract(x, "\\d+"))
groups <- c('g10', 'g2', 'g5', 'g9', 'g4', 'g8', 'g1', 'g3', 'g6', 'g7')
sort_by(groups, f)
# [1] "g1" "g2" "g3" "g4" "g5" "g6" "g7" "g8" "g9" "g10"
Здесь она сортирует groups
по номерам, содержащимся в каждой группе. Вы можете указать несколько функций для sort_by
:
f1 <- function(x) str_extract(x, "^[a-z]+")
f2 <- function(x) as.numeric(str_extract(x, "\\d+"))
groups <- c('g10', 'a2', 'f5', 'g9', 'g4', 'b8', 'c1', 'b3', 'a6', 'c17')
sort_by(groups, f1, f2)
# [1] "a2" "a6" "b3" "b8" "c1" "c17" "f5" "g4" "g9" "g10"
Здесь данные сортируются по «префиксам», а затем по номерам.