gpt4 book ai didi

r - R查找月份的最后一个工作日

转载 作者:行者123 更新时间:2023-12-04 13:38:09 25 4
gpt4 key购买 nike

如何使用R查找该月的最后一个工作日(例如,星期三)?在下面的代码中,我计算月,月中的某天,月中的某周和工作日。 2014年1月有5个星期三,但2014年2月只有4个星期三,因此我不能使用max(每月的星期)作为过滤器。可以提供任何帮助,尽管我更喜欢使用基本R函数。

DF <- data.frame(DATE = seq(as.Date("2014-01-01"), as.Date("2014-12-31"), "day"))

DF$MONTH <- as.numeric(format(DF$DATE, "%m"))
DF$DAY_OF_MONTH <- as.numeric(format(DF$DATE, "%d"))
DF$WEEK_OF_MONTH <- ceiling(as.numeric(format(DF$DATE, "%d")) / 7)
DF$WEEKDAY <- format(DF$DATE, "%A")

DF

最佳答案

我认为这是您追求的目标:

DF$last_weekday_o_month <- ave( 
weekdays(DF$DATE),
months(DF$DATE),
FUN = function(x) tail(x[ !(x %in% c("Saturday","Sunday")) ], 1)
)

要查找最后一个工作日的特定日期。
DF$last_weekdaydate_o_month <- ave( 
DF$DATE,
months(DF$DATE),
FUN = function(x) tail(x[ !(weekdays(x) %in% c("Saturday","Sunday")) ], 1)
)

结果看起来像...
          DATE last_weekday_o_month last_weekdaydate_o_month
1 2014-01-01 Friday 2014-01-31
2 2014-01-02 Friday 2014-01-31
3 2014-01-03 Friday 2014-01-31
4 2014-01-04 Friday 2014-01-31
5 2014-01-05 Friday 2014-01-31
6 2014-01-06 Friday 2014-01-31
...
360 2014-12-26 Wednesday 2014-12-31
361 2014-12-27 Wednesday 2014-12-31
362 2014-12-28 Wednesday 2014-12-31
363 2014-12-29 Wednesday 2014-12-31
364 2014-12-30 Wednesday 2014-12-31
365 2014-12-31 Wednesday 2014-12-31

如果首先进行此操作,那么当然可以将 last_weekday_o_month计算为 weekdays(last_weekdaydate_o_month)

如果有几个软件包,可以按照@RichardScriven的建议更优雅/更容易地完成:
library(data.table)
setDT(DF)[,
last_weekdaydate_o_month := last(DATE[!chron::is.weekend(DATE)])
, by = month(DATE)]

这使
           DATE last_weekdaydate_o_month
1: 2014-01-01 2014-01-31
2: 2014-01-02 2014-01-31
3: 2014-01-03 2014-01-31
4: 2014-01-04 2014-01-31
5: 2014-01-05 2014-01-31
---
361: 2014-12-27 2014-12-31
362: 2014-12-28 2014-12-31
363: 2014-12-29 2014-12-31
364: 2014-12-30 2014-12-31
365: 2014-12-31 2014-12-31

关于r - R查找月份的最后一个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33088424/

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