R 如何找到下一天?

R 如何找到下一天?,r,lubridate,R,Lubridate,我需要找到与一组日期对应的所有“下周五” 例如,2015-08-03(2015年8月3日,星期一)作为输入应返回2015-08-07(2015年8月7日,星期五)作为输出 在阅读时,我找不到一种方法来管理这种需求,您将如何继续 library(lubridate) date <- "2015-08-03" date <- wmd(date) wday(date, label = TRUE) 库(lubridate) 日期Lubridate提供了一个很好的功能持续时间。您可以使用此

我需要找到与一组日期对应的所有“下周五”

例如,2015-08-03(2015年8月3日,星期一)作为输入应返回2015-08-07(2015年8月7日,星期五)作为输出

在阅读时,我找不到一种方法来管理这种需求,您将如何继续

library(lubridate) 
date <- "2015-08-03"
date <- wmd(date)
wday(date, label = TRUE)
库(lubridate)

日期Lubridate提供了一个很好的功能持续时间。您可以使用此选项将天添加到当前日期

通常最好不要创建与函数同名的变量(即日期)

日期尝试此功能:

nextweekday <- function(date, wday) {
  date <- as.Date(date)
  diff <- wday - wday(date)
  if( diff < 0 )
    diff <- diff + 7
  return(date + diff)
}
nextweekday
library(lubridate)
下周五Thx基里尔

这太棒了!它为我节省了很多工作,你也可以用模和整数除法来做

例如,对于星期五,请检查以下内容:

library(lubridate)

next_friday <- function(dates) {
  dates + days((5 - wday(dates) %% 6) + (wday(dates) %/% 6))
}
库(lubridate)
下周五日期
[1] "2020-06-28" "2020-03-22" "2020-07-15" "2020-01-16" "2020-08-01" "2020-05-16" "2020-10-20" "2020-11-03"
[9] "2020-08-25" "2020-10-07" "2020-04-18" "2020-12-11" "2020-05-20" "2020-08-09" "2020-01-10" "2020-05-21"
[17] "2020-10-24" "2020-03-06" "2020-05-19" "2020-09-08"
>下周五(日期)
[1] "2020-07-02" "2020-03-26" "2020-07-16" "2020-01-16" "2020-08-06" "2020-05-21" "2020-10-22" "2020-11-05"
[9] "2020-08-27" "2020-10-08" "2020-04-23" "2020-12-17" "2020-05-21" "2020-08-13" "2020-01-16" "2020-05-21"
[17] "2020-10-29" "2020-03-12" "2020-05-21" "2020-09-10"
>wday(下周五(日期))
[1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
你读过了吗?
library(lubridate) 

nextFriday <- function(date) {
  date <- ymd(date)
  .day <- wday(date, label = TRUE)
  shift <- ifelse(as.numeric(.day) < 6, 0, 7)
  date + days(6 - as.numeric(.day) + shift)
}

nextFriday("2015-08-03")
library(lubridate)

next_friday <- function(dates) {
  dates + days((5 - wday(dates) %% 6) + (wday(dates) %/% 6))
}
> dates <- sample(seq(ymd('2020-01-01'),ymd('2021-01-01'), by='days'), 20)
> dates
 [1] "2020-06-28" "2020-03-22" "2020-07-15" "2020-01-16" "2020-08-01" "2020-05-16" "2020-10-20" "2020-11-03"
 [9] "2020-08-25" "2020-10-07" "2020-04-18" "2020-12-11" "2020-05-20" "2020-08-09" "2020-01-10" "2020-05-21"
[17] "2020-10-24" "2020-03-06" "2020-05-19" "2020-09-08"

> next_friday(dates)
 [1] "2020-07-02" "2020-03-26" "2020-07-16" "2020-01-16" "2020-08-06" "2020-05-21" "2020-10-22" "2020-11-05"
 [9] "2020-08-27" "2020-10-08" "2020-04-23" "2020-12-17" "2020-05-21" "2020-08-13" "2020-01-16" "2020-05-21"
[17] "2020-10-29" "2020-03-12" "2020-05-21" "2020-09-10"

> wday(next_friday(dates))
 [1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5