如何在R中根据日期获取星期的起始日期

14

我有一个数据集,其中一列包含日期。我想要找到这些date值的星期开始日期。

我使用lubridate中的week函数获取星期数。例如,

week(as.Date("04/20/2017", "%m/%d/%Y"))

#Solution
[1] 16

有没有一种方法可以得到一周的起始日期而不是weeknum?在这种情况下,我期望得到"04/16/2017"或者"04/17/2017"。如果一周从星期日或星期一开始,我并不是特别在意。 我看了这个问题,但是没有获得太多帮助。


1
另一种方法是使用data.table:round(as.IDate("04/20/2017", "%m/%d/%Y"), "week") - Frank
2个回答

34

使用 lubridate 包中的 floor_date 函数。

library("lubridate")
floor_date(as.Date("04/20/2017", "%m/%d/%Y"), unit="week")

4
在运行 floor_date 函数之前,请添加 library(lubridate) - Steve Strates
5
值得一提的是,您还可以通过使用 floor_date(x, unit = 'week', week_start = 1) 强制将周起始日设置为周一。 - r.bot

9
您可以使用下面的代码:
as.Date(format(as.Date("04/20/2017", "%m/%d/%Y"),"%Y-%W-1"),"%Y-%W-%u")
[1] "2017-04-17"

我不确定这是format工作方式的问题还是仅仅是在这里使用的问题,但这并不适用于所有日期;例如,as.Date(format(as.Date("01/04/2019", "%m/%d/%Y"),"%Y-%W-1"),"%Y-%W-%u")返回NA,因为format(as.Date("01/04/2019", "%m/%d/%Y"),"%Y-%W-1")返回"2019-00-1" - Rookatu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接