Reorder factor levels using names

3.1k Views Asked by At

I can reorder the levels of a factor using their indices like this

factor(iris$Species,levels(iris$Species)[c(3:1)])

However if I try to reorder the same factor by name, it does not work:

factor(iris$Species,levels(iris$Species)[c("virginica", "versicolor", "setosa")])

Is there a way to reorder the levels of a factor using their names?

1

There are 1 best solutions below

0
On BEST ANSWER

Why don't you use the basic variant with giving new level names:

factor(iris$Species, levels=c("virginica", "versicolor", "setosa"))

Be sure to list all level names, though. Otherwise, you will end up with NA values.

However, for completeness: If you rely on the order of the elements within a factor, you probably should used ordered instead of factor. That is just a factor with, well, ordered levels, or, more mathematically, a relation < between the factor levels. See:

> ordered(1:3, levels=c('1', '3', '2'))
[1] 1 2 3
Levels: 1 < 3 < 2