如何用lubridate获取每月最后一个工作日?求简便实现方法
获取每月最后一个工作日的简便方法
方法一:用lubridate结合条件判断(无需循环)
先获取当月最后一天,再根据星期几直接计算需要调整的天数,全程用向量运算实现:
library(lubridate) get_last_workday <- function(date) { last_day <- ceiling_date(date, "month") - days(1) # 根据日期的星期几调整:周日减2天,周六减1天,工作日不变 adjust_days <- case_when( weekdays(last_day) == "星期日" ~ 2, weekdays(last_day) == "星期六" ~ 1, TRUE ~ 0 ) last_day - days(adjust_days) } # 测试示例 get_last_workday(as.Date("2023-12-22")) # 输出结果:"2023-12-29"
方法二:使用bizdays包(支持自定义节假日)
如果需要考虑节假日,bizdays包的专业工具能更高效处理,同样无需循环:
library(bizdays) library(lubridate) # 创建仅排除周末的工作日日历 create.calendar("workdays_cal", weekdays = c("Saturday", "Sunday")) get_last_workday <- function(date) { last_day <- ceiling_date(date, "month") - days(1) # 自动向前找到最近的工作日 adjust.previous(last_day, "workdays_cal") } # 测试示例 get_last_workday(as.Date("2023-12-22")) # 输出结果:"2023-12-29"
内容的提问来源于stack exchange,提问作者Thomas Philips
相关产品推荐
相关产品推荐

