Reorder factor levels by day of the week in R

dataframe, r, r-factor

Solution

You need to specify the levels in factor and then use `order` with indexing:

daily$DoW <- factor(daily$DoW, levels= c("Sunday", "Monday", 
    "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"))

daily[order(daily$DoW), ]

Problem

I have the following data.frame in R: ``` > daily DoW Duration 1 Friday 14.0000000000000 2 Monday 21.0000000000000 3 Saturday 12.0000000000000 4 Thursday 28.0000000000000 5 Tuesday 12.0000000000000 6 Wednesday 91.0000000000000 7 Sunday 20.0000000000000 ``` I'd like to change the order of the factor levels so that the weeks are in (US) day-of-week order. It looks like I can do this in a slow, puzzling way with `relevel()`. But this only takes 1 numeric argument and moves it to the top. So, `relevel(daily$DoW, 7)`, moves Sunday to the top, but the rest remain unordered (which means I need to relevel it in reverse order). Doable, but there must be a better way, right? (Time series solution also acceptable.)

Original source