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

Mit*_*ops 19 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
Run Code Online (Sandbox Code Playgroud)

我想更改因子级别的顺序,以便周数符合(美国)星期几的顺序.

看起来我可以用一种缓慢而令人费解的方式做到这一点relevel().但这只需要1个数字参数并将其移至顶部.所以,relevel(daily$DoW, 7)将星期日移到顶部,但其余的仍然是无序的(这意味着我需要以相反的顺序重新排列).

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

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

Tyl*_*ker 23

您需要在factor中指定级别,然后使用order索引:

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

daily[order(daily$DoW), ]
Run Code Online (Sandbox Code Playgroud)

  • 我检查了R是否有一个星期几的常量内置,就像几个月一样,它似乎没有.想到它会. (3认同)

onl*_*tom 8

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

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

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

现在,当您使用tableplot或任何其他函数时Dow,它将按照您上面指定的顺序进行。