在 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 日历中将当前周末日期设置为默认日期。星期在星期日结束