Changing the order of levels of a factor

    Solution

    Factors in R come in two varieties: ordered and unordered, e.g., {small, medium, large} and {pen, brush, pencil}. For most analyses, it will not matter whether a factor is ordered or unordered. If the factor is ordered, then the specific order of the levels matters (small < medium < large). If the factor is unordered, then the levels will still appear in some order, but the specific order of the levels matters only for convenience (pen, pencil, brush) – it will determine, for example, how output will be printed, or the arrangement of items on a graph.

    One way to change the level order is to use on the factor and specify the order directly. In this example, the function ordered() could be used instead of factor().

    The levels can be specified explicitly:

    1. sizes <- factor(sizes, levels = c("small", "medium", "large"))
    2. sizes
    3. #> [1] small large large small medium
    4. #> Levels: small medium large

    We can do the same with an ordered factor:

    1. # Create a factor with the wrong order of levels
    2. sizes <- factor(c("small", "large", "large", "small", "medium"))
    3. sizes
    4. # Make medium first
    5. sizes <- relevel(sizes, "medium")
    6. sizes
    7. #> [1] small large large small medium
    8. #> Levels: medium large small
    9. # Make small first
    10. sizes <- relevel(sizes, "small")
    11. #> Levels: small medium large

    You can also specify the proper order when the factor is created.

    To reverse the order of levels in a factor:

    1. # Create a factor with the wrong order of levels
    2. sizes <- factor(c("small", "large", "large", "small", "medium"))
    3. sizes
    4. #> [1] small large large small medium
    5. #> Levels: large medium small
    6. sizes <- factor(sizes, levels=rev(levels(sizes)))
    7. sizes