19

我在 R 中有以下 data.frame:

> 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

我想更改因子水平的顺序,以便星期按(美国)星期几顺序排列。

看起来我可以用relevel(). 但这仅需要 1 个数字参数并将其移至顶部。所以, relevel(daily$DoW, 7), 星期天移动到顶部,但其余部分保持无序(这意味着我需要以相反的顺序重新调整它)。

可行,但必须有更好的方法,对吧?

(时间序列解决方案也可以接受。)

4

2 回答 2

24

您需要在因子中指定级别,然后order与索引一起使用:

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

daily[order(daily$DoW), ]
于 2012-04-25T05:09:43.930 回答
5

而不是 a factor,你想要的是 a Ordered.Factor

这行 R 代码将您的DoW变量转换为“有序因子”:

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.

于 2018-01-16T09:46:55.247 回答