Reorder factor levels by day of the week in R

坚强是说给别人听的谎言 提交于 2019-12-03 06:56:24

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!