Custom sorting (non-alphabetical)

categories, r, sorting

Solution

The levels should be specified explicitly:

A$animal <- factor(A$animal, levels = c("dog", "elephant","cat"))
A$color <- factor(A$color, levels = c("green", "blue", "red"))

Then you order by the 2 columns simultaneously:

A[order(A$animal,A$color),]

# animal color
# 6      dog green
# 4      dog  blue
# 5      dog   red
# 9 elephant green
# 7 elephant  blue
# 8 elephant   red
# 3      cat green
# 1      cat  blue
# 2      cat   red

Problem

I have a categorical data set that looks similar to: ``` A < -data.frame(animal = c("cat","cat","cat","dog","dog","dog","elephant","elephant","elephant"), color = c(rep(c("blue","red","green"), 3))) animal color 1 cat blue 2 cat red 3 cat green 4 dog blue 5 dog red 6 dog green 7 elephant blue 8 elephant red 9 elephant green ``` I want to order it so that 'animal' is sorted as `dog < elephant < cat`, and then the color is sorted `green < blue < red`. So in the end it would look like ``` # animal color # 6 dog green # 4 dog blue # 5 dog red # 9 elephant green # 7 elephant blue # 8 elephant red # 3 cat green # 1 cat blue # 2 cat red ```

Original source