按R中的星期几重新排序因子水平

时间:2012-04-25 04:58:53

标签: r dataframe r-factor

我在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)将星期日移到顶部,但其余的仍然是无序的(这意味着我需要以相反的顺序对其进行重新排序)。

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

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

2 个答案:

答案 0 :(得分:21)

您需要在因子中指定级别,然后使用带有索引的order

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

daily[order(daily$DoW), ]

答案 1 :(得分:3)

而不是factor,您想要的是Ordered.Factor

这行R代码会将您的DoW变量转换为&#34; Ordered Factor&#34;:

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

现在当您使用tableplotDow上的任何其他功能时,它将是您在上面指定的顺序。