Complex Ordering with Mixed Directions

Sometimes there are multiple sorting variables, but the variables have to be sorted in opposing directions. In this example, the task is to order the database first by vegetation type in alphabetical order (the default) and then within each vegetation type to sort by worm density in decreasing order (highest densities first). The trick here is to use order (rather than rev(orderi)) but to put a minus sign in front of Worm.density like this:

worms[order(Vegetation,-Worm.density),]

           Field.Name  Area  Slope  Vegetation  Soil.pH   Damp  Worm.density
2      Silwood.Bottom   5.1      2      Arable      5.2  FALSE             7
18         Pound.Hill   4.4      2      Arable      4.5  FALSE             5
8             Ashurst   2.1      0      Arable      4.8  FALSE             4
10      Rookery.Slope   1.5      4   Grassland      5.0   TRUE             7
1         Nashs.Field   3.6     11   Grassland      4.1  FALSE             4
7        Church.Field   3.5      3   Grassland      4.2  FALSE             3
3       Nursery.Field   2.8      3   Grassland      4.3  FALSE             2
6            Oak.Mead   3.1      2   Grassland      3.9  FALSE             2
13       South.Gravel   3.7      2   Grassland      4.0  FALSE             2
12       North.Gravel   3.3      1   Grassland      4.1  FALSE             1
19         Gravel.Pit   2.9      1   Grassland      3.5  FALSE             1
14  Observatory.Ridge   1.8      6   Grassland      3.8  FALSE             0
16       Water.Meadow   3.9      0      Meadow      4.9   TRUE             8
15         Pond.Field   4.1      0      Meadow      5.0   TRUE             6
4         Rush.Meadow   2.4      5      Meadow      4.9   TRUE             5
9         The.Orchard   1.9      0     Orchard      5.7  FALSE             9
11        Garden.Wood   2.9     10       Scrub      5.2  FALSE             8
5     Gunness.Thicket   3.8      0       Scrub      4.2  FALSE             6
17          Cheapside   2.2      8       Scrub      4.7   TRUE             4
20          Farm.Wood   0.8     10       Scrub      5.1   TRUE             3

Using the minus sign only works when sorting numerical variables. For factor levels you can use the ...

Get The R Book now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.