我正在寻找一种方法,以查找上一个日历星期的星期一的日期对象。例如,今天是2016年1月15日; 我需要构建一个函数来返回“2016-01-04 UTC”
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"
lastmon2 <- function(x) x - as.numeric(x-1+4)%%7
此外还有一个 lubridate
解决方案 (来自 martin.R):
library(lubridate)
ceiling_date(your_date, "week", 1)
floor_date(your_date, "week", 1)
函数文档。
library(lubridate) today <- Sys.Date() # 获取当前日期 last_friday <- today - days(wday(today) + ifelse(wday(today) >= 6, -6, 1)) # 计算上一个星期五的日期 last_friday # 输出结果
请注意,这段代码假设星期天为一周的第一天,因此它将星期六视为一周的最后一天。如果你的系统将星期一视为一周的第一天,则应在ifelse语句中使用“-5”而不是“-6”。 - hrbrmstrPrevMon <- function(x){ x <- as.POSIXlt(x, format = "%m/%d/%Y") x$mday <- x$mday - ((x$wday - 1) %% 7) - 7 return(x) }
- Chris