Я пытаюсь отсчитать n рабочих дней назад с сегодняшнего дня, чтобы получить конкретную дату.

Я хотел бы, чтобы пользователь вводил дни для обратного отсчета и позволял системе вычислить эту дату.

Скажем, я хотел бы отсчитать 100 (рабочих дней) назад с сегодняшнего дня.

A <- readline(prompt = "How many days backwards do you want to count? ")

#user input: 100

Date to be calculated <- Today date-A (format yyyy/mm/dd)

#Date to be calculated = 2018-03-02 

Затем я использую дату, чтобы получить некоторые значения набора данных, сохраненного для этой даты.

Любые комментарии будут высоко оценены

r
1
AL. 10 Июн 2018 в 18:31

1 ответ

Лучший ответ

Как вариант, можно написать рекурсивную функцию для вычитания дней недели. Функцию chron::is.weekend можно использовать, чтобы определить, равен ли день working-day. Другой вариант решения weekend/working-day может быть основан на дне, начинающемся с S, как предлагает @Ryan.

library(chron)
substractWorkingDays <- function(x, n){
  v <- seq(x, x -n, by="-1 day")
  workingDays <- sum(!is.weekend(v[-1])) #One can check day name start with `S`
  if(workingDays == n){
    return(v[length(v)])
  }else{
    substractWorkingDays(v[length(v)], n-workingDays)
  }
}

#Testing it

substractWorkingDays(as.Date("2018-06-10"), 5)
#[1] "2018-06-04"
substractWorkingDays(as.Date("2018-06-10"), 10)
#[1] "2018-05-28"
substractWorkingDays(as.Date("2018-06-10"), 12)
#[1] "2018-05-24"
0
MKR 10 Июн 2018 в 17:29