Фрейм данных смешанного порядка в R

У меня есть фрейм данных, который выглядит так:

a = c("1A","10A","11A","2B","2C","22C","3A","3B")
b= c(1,2,3,4,5,6,7,8)
ab = data.frame(a,b)

и я хочу отсортировать его по столбцу a. Я попробовал смешанный заказ

library(gtools)
ab[mixedorder(ab$a),]

но я не получаю желаемого результата (1A, 2B, 2C, 3A, 3B ..). Как я могу это исправить?


person geo_dd    schedule 01.09.2016    source источник


Ответы (2)


Нам нужно преобразовать в класс character (поскольку столбец «a» равен factor на основе параметра по умолчанию в вызове data.frame, т.е. stringsAsFactors=TRUE)

ab[mixedorder(as.character(ab$a)),]
#    a b
#1  1A 1
#4  2B 4
#5  2C 5
#7  3A 7
#8  3B 8
#2 10A 2
#3 11A 3
#6 22C 6

Дополнительные параметры также описаны здесь

person akrun    schedule 01.09.2016

Я бы просто разделил колонку. Если вам нужен числовой порядок для числовой части идентификатора, вы, вероятно, должны иметь эти числа в виде числового столбца в любом случае.

ab$a1 <- as.numeric(gsub("[[:alpha:]+]", "", ab$a))
ab$a2 <- gsub("\\d+", "", ab$a)

ab[order(ab$a1, ab$a2),]
#    a b a1 a2
#1  1A 1  1  A
#4  2B 4  2  B
#5  2C 5  2  C
#7  3A 7  3  A
#8  3B 8  3  B
#2 10A 2 10  A
#3 11A 3 11  A
#6 22C 6 22  C
person Roland    schedule 01.09.2016
comment
Также, возможно, setDT(ab)[do.call(order, tstrsplit(ab$a, "(?=\\D)", perl = TRUE, type.convert = TRUE))] - person David Arenburg; 01.09.2016