1
特定の日付以降の営業日数を返し、NAsを考慮して営業日を日付に追加する機能を希望します ただし、私の解決策はお粗末で、よりエレガントな方法が必要です。締め切りからの取引日数を整数として返し、dplyrを使用して取引日を追加します
library(dplyr)
library(timeDate)
library(RQuantLib)
library(lubridate)
item <- c("a", "b")
date1 = as.Date(c("2017-11-30", "2017-11-01"))
date2 = as.Date(c("2017-12-01", "2017-11-16"))
d <- data.frame(item, date1, date2, stringsAsFactors=F)
line3 <- c("c", "2017-12-03", NA)
line4 <- c("d", NA, "2017-12-03")
d <- rbind(d, line3, line4)
この機能は機能しますが、複数の項目で非常に遅く実行され、わかりやすく表示されません。
bizDeadline <- function(x, nBizDys = 10) {
output <- Reduce(rbind, Map((function(x, howMuch = 15) {
x <- as.Date(x, origin = "1960-01-01")
days <- x + 1:(howMuch * 2)
Deadline <- days[isBizday(as.timeDate(days))][howMuch]
data.frame(DateIn = x, Deadline, DayOfWeek = weekdays(Deadline), TimeDiff = difftime(Deadline,
x))
}), x, howMuch = nBizDys))
output$Deadline
}
これは休日と週末を除外するのに理想的です。
d %>% mutate(deadline = bizDeadline(date1, 10))
d$DaysOverdue <- NA
これはループで機能しますが、ベクター化されたMutateでは機能しません。 RQuantLibから
i = 1
for(i in 1:nrow(d)){
d$DaysOverdue[i] = businessDaysBetween("UnitedStates", d$date1[i], today())
}
この関数は、
d %>% mutate(od = businessDaysBetween("UnitedStates", date1, today())
任意のより良い解決策をベクトル化されていないようですか?