2016-10-22 45 views
1

我有以下的數據幀dplyr:變異並找到下一個工作日?

time <- seq(from =ymd("2014-02-24"),to= ymd("2014-03-20"), by="days") 
df2 <- data.frame(time) 
df2 <- df2 %>% mutate(day_of_week = wday(time, label = TRUE)) 
> df2 
     time day_of_week 
1 2014-02-24   Mon 
2 2014-02-25  Tues 
3 2014-02-26   Wed 
4 2014-02-27  Thurs 
5 2014-02-28   Fri 
6 2014-03-01   Sat 
7 2014-03-02   Sun 
8 2014-03-03   Mon 
9 2014-03-04  Tues 
10 2014-03-05   Wed 
11 2014-03-06  Thurs 
12 2014-03-07   Fri 
13 2014-03-08   Sat 
14 2014-03-09   Sun 
15 2014-03-10   Mon 
16 2014-03-11  Tues 
17 2014-03-12   Wed 
18 2014-03-13  Thurs 
19 2014-03-14   Fri 
20 2014-03-15   Sat 
21 2014-03-16   Sun 
22 2014-03-17   Mon 
23 2014-03-18  Tues 
24 2014-03-19   Wed 
25 2014-03-20  Thurs 

是否有可能使用dplyrmutate得到的下一個營業日的每個時間日期?如果時間是星期五,說下一個星期一。

lubridate似乎不處理業務日期。

非常感謝!

+2

包括假期?如果可能, – alistaire

+0

,是的! –

+1

快速和骯髒:'df2%>%mutate(next_biz_day = case_when(。$ day_of_week =='Sat'〜。$ time + 2,。$ day_of_week =='Sun'〜。$ time + 1,TRUE〜。$時間))',但請參閱chron的'is.holiday'和'is.weekday' – alistaire

回答

2
library(bizdays) 

load_rmetrics_calendars(2014) 

mutate(df2, 
     nbd_time=following(time_seq, 'Rmetrics/NERC'), 
     nbd_time=ifelse(nbd_time==time_seq, offset(time_seq, 1, 'Rmetrics/NERC'), nbd_time), 
     nbd_time=as.Date(nbd_time, origin="1970-01-01"), 
     nbddow=wday(nbd_time, label=TRUE)) 

您可以定義/加載精確的日曆,以考慮地區差異或特定日曆需求。

+0

太棒了!謝謝 –

+0

注意:'library(timeDate)'是需要的 –