Упорядочить data.frame по фактору на основе целых чисел

У меня есть data.frame, в котором один из столбцов, изначально содержащий целочисленные значения, был преобразован в фактор (выше всех данных, которые у меня есть).

Я хотел бы отсортировать data.frame на основе этого фактора, но результаты должны быть отсортированы таким образом, чтобы порядок этого фактора был "1 2 3" вместо "1 11 12", как это происходит при использовании order без других манипуляций:

sample <- data.frame(a = c(1,2,2,3,4), b= factor(c("1","12","11","2","3")))
sample
  a  b
1 1  1
2 2 12
3 2 11
4 3  2
5 4  3
sample[order(sample$b),]
  a  b
1 1  1
3 2 11
2 2 12
4 3  2
5 4  3

Поскольку я хочу, чтобы этот столбец оставался фактором в моем окончательном наборе данных, я не решаюсь преобразовать столбец в целое число (из-за проблем с as.integer а также as.numeric применительно к факторам). У меня также есть почти 100 уровней в этом факторе, поэтому ручное переопределение уровней фактора таким образом, что я должен выписать каждый уровень, также не является идеальным.

1 ответ

Решение

Мы можем order строки набора данных после преобразования столбца 'b' в numeric класс, но class из "б" по-прежнему остается factor,

sample1 <- sample[order(as.numeric(as.character(sample$b))),]
row.names(sample1) <- NULL
str(sample1)
#'data.frame':   5 obs. of  2 variables:
#$ a: num  1 3 4 2 2
#$ b: Factor w/ 5 levels "1","11","12",..: 1 4 5 2 3

sample1
#  a  b
#1 1  1
#2 3  2
#3 4  3
#4 2 11
#5 2 12
Другие вопросы по тегам