问题
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.)
回答1:
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), ]
回答2:
Instead of a factor
, what you want is an Ordered.Factor
.
This line of R code converts your DoW
variable to an "Ordered Factor":
daily$DoW <- ordered(daily$DoW, levels=c("Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday", "Sunday"))
Now when you use table
, plot
or any other functions on Dow
it will be the order you specified above.
来源:https://stackoverflow.com/questions/10309564/reorder-factor-levels-by-day-of-the-week-in-r