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?
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
来源:https://stackoverflow.com/questions/20468420/reorder-factor-levels-using-names