【问题标题】:Lubridate giving wrong week numbersLubridate 给出错误的周数
【发布时间】:2021-02-01 12:45:00
【问题描述】:

我使用 lubridate 包,有点困惑,因为 1 月 29 日星期五和 2 月 2 日星期一属于同一周,这没有意义。 这是我的代码:

library(lubridate)
day1 <- "2021-01-29 00:03:43 CET"
day5 <- "2021-02-01 08:28:51 CET"
week(day1)
wday(day1, label = T)
week(day5)
wday(day5, label = T)

这给了我以下输出

> week(day1)
[1] 5
> wday(day1, label = T)
[1] Fr\\.
Levels: So\\. < Mo\\. < Di\\. < Mi\\. < Do\\. < Fr\\. < Sa\\.
> week(day5)
[1] 5
> wday(day5, label = T)
[1] Mo\\.
Levels: So\\. < Mo\\. < Di\\. < Mi\\. < Do\\. < Fr\\. < Sa\\.

另一个奇怪的事情是天的水平。知道这里有什么问题。我刚刚更新了我所有的包。

干杯 伦格

【问题讨论】:

  • ?week() : week() 返回从日期到 1 月 1 日之间发生的完整 7 天周期数,加一。
  • 天的水平是正确的。这是从周日开始的有序因素。您可以通过设置选项week_start 来调整此设置,例如wday(day5, label = T, week_start = 1) 让一周从星期一开始。也可以使用isoweek 来获取符合 ISO 标准的周数。
  • 有关周惯例的相关帖子:Transform year/week to date object.
  • 谢谢大家!那几天的奇怪水平呢?
  • 见github.com/tidyverse/lubridate/issues/551。美国周从周日开始,欧洲周从周一开始,您可以使用 week_start 参数进行设置,请参阅我的答案中的编辑

标签: r tidyverse lubridate


【解决方案1】:

根据其帮助文件,week() 函数“返回从日期到 1 月 1 日之间发生的完整 7 天期间的数量,加一。”

因此,预计 1 月 29 日星期五和 2 月 2 日星期一的行为。它们都是 2021 年第五个 7 天期间的一部分。

Week  Dates
1     Jan 1 - Jan 7
2     Jan 8 - Jan 14
3     Jan 15 - Jan 21
4     Jan 22 - Jan 28
5     Jan 29 - Feb 4

至于您的工作日,wday() 函数有一个 locale 参数。默认情况下,它设置为locale = Sys.getlocale("LC_TIME"),这是当前系统区域设置。然后,wday() 函数会根据该语言环境返回日期名称缩写。使用 Sys.getlocale("LC_TIME") 查看您当前的语言环境。如果不是您所期望的,您可以更改您的语言环境:How to change the locale of R?。

【讨论】:

    【解决方案2】:

    你可以使用isoweek():

    > isoweek(day1)
    [1] 4
    > isoweek(day5)
    [1] 5
    
    

    关于一周的开始日期,您可以在 wday 中使用 week_start 参数设置它:

    wday(day1, label = T, week_start = getOption("lubridate.week.start", 1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2022-11-25
      • 2013-01-17
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多