You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从R生成的日期序列中筛选澳大利亚月末工作日?

获取澳大利亚时区月末工作日序列

这里提供两种直接可行的方案,基于你已有的代码逻辑优化:

方案1:基于现有每日序列筛选

如果你已经生成了完整的每日工作日标记数据,可以通过分组筛选快速得到每个月的最后一个工作日:

pacman::p_load(RQuantLib, dplyr)

# 你的原有代码
daysSeq = seq(from = as.Date("2017-08-31"), to = as.Date("2023-08-31"), by = "1 day")
business_days <- data.frame(dates = daysSeq, bizday = isBusinessDay("Australia", daysSeq))

# 按年月分组,提取每个月最后一个工作日
monthly_last_bizday <- business_days %>%
  # 生成年月分组标识
  mutate(year_month = format(dates, "%Y-%m")) %>%
  group_by(year_month) %>%
  # 只保留工作日
  filter(bizday) %>%
  # 取每组最后一条(即该月最后一个工作日)
  slice_tail(n = 1) %>%
  ungroup() %>%
  # 只保留日期列
  select(dates)

方案2:直接调用RQuantLib获取(更高效)

不需要生成完整每日序列,直接用getLastBusinessDay函数针对每个月份获取澳大利亚时区的月末工作日,效率更高:

pacman::p_load(RQuantLib)

# 生成需要覆盖的年月范围(每个月的第一天)
year_months <- seq(as.Date("2017-08-01"), as.Date("2023-08-01"), by = "month")

# 遍历每个年月,获取对应月末工作日
monthly_last_bizday <- sapply(year_months, function(ym) {
  getLastBusinessDay(
    calendar = "Australia",
    month = as.integer(format(ym, "%m")),
    year = as.integer(format(ym, "%Y"))
  )
})

# 转换为日期格式并整理成数据框
monthly_last_bizday <- as.Date(monthly_last_bizday, origin = "1970-01-01")
monthly_last_bizday <- data.frame(dates = monthly_last_bizday)

两种方案都会返回2017-08到2023-08期间每个月的澳大利亚月末工作日序列,结果完全一致。方案2避免了生成海量每日数据,适合时间范围较大的场景。

内容的提问来源于stack exchange,提问作者Jak Carty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:30:30