Упорядочить 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