1) gtools mixedsort
и mixedorder
в gtools могут сделать это. Мы покажем, как это сделать для вектора v
и целого фрейма данных DF
, в котором могут быть дополнительные столбцы, которые необходимо переместить вместе со столбцом v
. (Тестовые данные воспроизводимо определены в примечании в конце. Если столбец v в DF был фактором, а не символом, используйте вместо DF $ v символ as.character (DF $ v).
library(gtools)
mixedsort(v)
## [1] "1:5" "2:1" "2:8" "2:14" "11:36"
DF[mixedorder(DF$v), ]
## v x
## 1 1:5 1
## 3 2:1 3
## 5 2:8 5
## 4 2:14 4
## 2 11:36 2
2) База R Эта альтернатива немного длиннее, но использует только базу R. Она дает те же ответы, что и (1). Комментарий о факторах в (1) также применим и здесь.
o <- do.call("order", read.table(text = v, sep = ":"))
v[o]
o <- do.call("order", read.table(text = DF$v, sep = ":"))
DF[o, ]
Примечание
Используемые данные испытаний
v <- c("1:5", "11:36", "2:1", "2:14", "2:8")
DF <- data.frame(v, x = seq_along(v), stringsAsFactors = FALSE)