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
Use a custom list to sort or fill in a user-defined order. Excel provides day-of-the-week and month-of-the year built-in lists, but you can also create your own custom list.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With