我在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)
将星期日移到顶部,但其余的仍然是无序的(这意味着我需要以相反的顺序对其进行重新排序)。
可行,但必须有更好的方法,对吧?
(时间序列解决方案也可以接受。)
答案 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"))
现在当您使用table
,plot
或Dow
上的任何其他功能时,它将是您在上面指定的顺序。