在 R 中将日期转换为日期数(星期一 = 1,星期二 = 2)

Posted

技术标签:

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

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

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

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

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

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

谢谢

【问题讨论】:

Find the day of a week in R的可能重复 我很确定这是重复的,但您可以使用基础 R 中的 POSIXlt 将日期转换为工作日数字。 as.POSIXlt('2015-03-01')$wday 【参考方案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

【讨论】:

以上是关于在 R 中将日期转换为日期数(星期一 = 1,星期二 = 2)的主要内容,如果未能解决你的问题,请参考以下文章

蔡勒(Zeller)公式及其推导:快速将任意日期转换为星期数

如何在 jQuery 日历或 Angular Js 日历中将当前周末日期设置为默认日期。星期在星期日结束

如何将UTC秒数转换为日期,100分,在线等

在 SQL 的触发器中将日期设置为该周的星期一

如何在zk-calendar中将任何日期/星期/月份设置为默认视图?

怎么取两个日期之间的周数