【问题标题】:Reorder factor levels by day of the week in R在 R 中按星期几重新排序因子水平
【发布时间】:2012-04-25 04:58:53
【问题描述】:

我在 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),周日移动到顶部,但其余部分保持无序(这意味着我需要以相反的顺序重新调整它)。

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

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

【问题讨论】:

    标签: r dataframe r-factor


    【解决方案1】:

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

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

    【讨论】:

    • 我检查了 R 是否像几个月一样内置了一周中的某一天,但似乎没有。以为会的。
    • 这几乎奏效了---我将最后一行实现为赋值,daily &lt;- daily[order(daily$DoW),] 但我注意到,当我用ggplot(daily, aes(x=DoW, y=Duration)) + geom_histogram() 制作直方图时,因素列在x 轴上的正确顺序,但不在 y 轴上——也就是说,y 值仍然对应于 x 值的旧位置。即,星期日是 14,而不是 20。
    • 是的,也许我的分配不正确,但是当我现在只输入daily 时,索引仍然列为7,2,5,6,4,1,3,即使DoW 列现在以星期日开头。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-05-14
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 2020-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多