查找上一个星期一

4

我正在寻找一种方法,以查找上一个日历星期的星期一的日期对象。例如,今天是2016年1月15日; 我需要构建一个函数来返回“2016-01-04 UTC”


2
听起来像是一个很酷的函数。你有什么? - rawr
3
题目:R语言如何获取上一个星期五的日期?答案:使用lubridate包中的wday函数,结合lubridate和base R的日期函数,可以轻松地获得上一个星期五的日期。以下是示例代码:library(lubridate) today <- Sys.Date() # 获取当前日期 last_friday <- today - days(wday(today) + ifelse(wday(today) >= 6, -6, 1)) # 计算上一个星期五的日期 last_friday # 输出结果请注意,这段代码假设星期天为一周的第一天,因此它将星期六视为一周的最后一天。如果你的系统将星期一视为一周的第一天,则应在ifelse语句中使用“-5”而不是“-6”。 - hrbrmstr
2
PrevMon <- function(x){ x <- as.POSIXlt(x, format = "%m/%d/%Y") x$mday <- x$mday - ((x$wday - 1) %% 7) - 7 return(x) } - Chris
谢谢大家!Chris的解决方案很好。 - Steve Palley
2个回答

8
该问题要求“上一个日历周的星期一”。我们在下面假设这意味着您想要输入日期之前或当天的星期一。
请注意最好使用“Date”类,因为不需要时间,并且“Date”类没有时区,因此避免了与“POSIXt”类相关的潜在时区错误。
在zoo快速参考手册zoo quickref vignette中有一个名为nextfri的函数,我们可以将其用作类似函数的基础。我们进行以下更改:(1) 将"ceiling"替换为"floor",(2) 将5(星期五)替换为1(星期一),并且 (3) 我们向to as.Date添加了origin=参数--如果加载了zoo,则提供默认原点,因此可以选择省略origin=参数。

这个函数只使用基础R语言并且是向量化的。它接受一个"Date"类向量,并返回一个"Date"类向量,表示每个输入日期所在周一的日期。

lastmon <- function(x) 7 * floor(as.numeric(x-1+4)/7) + as.Date(1-4, origin="1970-01-01")

例如,
 > lastmon(as.Date(c("2016-01-15", "2016-01-11")))
[1] "2016-01-11" "2016-01-11"

“lastmon”函数可以简化为以下形式:
lastmon2 <- function(x) x - as.numeric(x-1+4)%%7

注意: 还可以查看 这里, 这里, 这里这里 的 SO 答案,以获取更多关于 nextfri 或其变体的用法。


2

此外还有一个 lubridate 解决方案 (来自 martin.R):

library(lubridate)
ceiling_date(your_date, "week", 1)

同样地,要查找上周一:
floor_date(your_date, "week", 1)

函数文档


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