gpt4 book ai didi

datetime - 计算最近n个工作日

转载 作者:行者123 更新时间:2023-12-02 19:51:25 27 4
gpt4 key购买 nike

我在 R 中有一个函数,给定 n 天,返回最后 n 个工作日的列表。我的解决方案工作正常,但感觉不优雅,我想知道是否有任何简单的方法可以改进它。

WeekdayList <- function(n) {
Today <- as.Date(Sys.time())
days <- c(Today)
i <- 1
while (length(days) < n) {
NewDay <- as.Date(Today-i)
if (!weekdays(NewDay) %in% c("Saturday", "Sunday")) {
days <- c(days,NewDay)
}
i <- i+1
}
days
}

WeekdayList(30)
WeekdayList(2)

排除假期也是一个不错的功能。

最佳答案

矢量化代码在 R 中至关重要。示例如下:

WeekdayList2 <- function(n) {
Today <- as.Date(Sys.time())
dayz <- seq(Today, Today - 2 * n, "-1 days")
dayz <- dayz[!(weekdays(dayz) %in% c("Saturday", "Sunday"))]
dayz <- dayz[seq_len(n)]
return(dayz)
}
identical(WeekdayList2(1000), WeekdayList(1000))
system.time(WeekdayList2(10000))
system.time(WeekdayList(10000))
[1] TRUE
user system elapsed
0 0 0
user system elapsed
4.90 0.00 4.91
正如您所看到的,尽管我的函数创建了一个几乎是所需大小两倍的向量(然后删除了周末),但它比使用“for”循环要快得多。我的计算机甚至无法使用 n = 100000 运行您的函数(无论如何,您也不会关心那么多天前的情况),但 WeekdayList2 几乎可以立即运行它。

由于假期与您所在的位置相关,因此您可能需要手动上传日期列表,并添加另一个条件以从数据中过滤掉这些日期。

关于datetime - 计算最近n个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6114083/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com