【问题标题】:Convert a date to a day number (monday = 1, tuesday = 2) in R在 R 中将日期转换为日期数(星期一 = 1,星期二 = 2)
【发布时间】:2015-08-02 06:32:39
【问题描述】:

有人可以帮我解决以下问题吗:

我有一个日期,例如:3-1-2014,

我想把它转换成数字 5,因为今天是星期五。

所以 7-1-2014 将是 1,因为它是星期一。

哪个包/代码可以为我做到这一点?

谢谢

【问题讨论】:

  • 我很确定这是重复的,但您可以使用基础 R 中的 POSIXlt 将日期转换为工作日数字。 as.POSIXlt('2015-03-01')$wday

标签: r date numbers rstudio type-conversion


【解决方案1】:

您可以使用lubridate 轻松完成此操作,尽管它将星期日索引为“1”。因此,由于 2014 年 3 月 1 日是星期六,它会返回 '7'

library(lubridate)
wday(mdy("3-1-2014"))
[1] 7

【讨论】:

  • 这个偏移了一个。问题是要求星期六 = 6,而不是星期六 = 7
【解决方案2】:

使用R base,您可以使用strftime函数和“%u”格式参数返回工作日。

as.numeric(strftime(as.Date('3-1-2014', "%d-%m-%Y"), "%u"))
[1] 5

【讨论】:

    【解决方案3】:

    现在您可以将week_start 选项与wday() 一起使用

    遵循 ISO 惯例的星期几开始 - 1 表示星期一,7 表示星期日(默认)。您可以将 lubridate.week.start 选项设置为 全局控制此参数。

    所以下面的代码给出了想要的输出

    library(lubridate) 
    lubridate::wday(mdy("3-1-2014"), week_start = 1)
    [1] 6
    

    请注意data.table 库具有与wday() 相同名称但没有week_start 选项的函数。

    【讨论】:

      【解决方案4】:

      使用包“lubridate”几乎就是答案。它将星期日索引为“1”,星期六索引为“6”,但您可以通过显示前一天的星期几来简单地移动一天,如下所示:

      library(lubridate) 
      wday(mdy("3-1-2014") -1)
      [1] 6
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-05
        • 2022-01-27
        • 1970-01-01
        • 2011-01-29
        • 2012-08-12
        • 2014-01-11
        相关资源
        最近更新 更多