2013-03-18 69 views
1

我需要知道給定月份的第一個工作日,R中是否有包含相關函數的包?訪問月份的第一個工作日

+0

你說的經營業務一天是什麼意思?哪個日曆? – agstudy 2013-03-18 13:52:49

+0

說例如英國日曆... – 2013-03-18 14:06:27

+0

不要說,例如,如果你想要的只是每個月的第一個星期一! – 2013-03-18 14:15:31

回答

7

TIMEDATE包有一個功能isBizday,這將幫助你在這裏。將會有更優雅的方式將dateTime對象轉換爲其他格式,但這至少應該讓你開始。

library(timeDate) 

## Example data 
dates <- as.Date("2013-01-01") + 0:364 
Dates <- as.timeDate(dates) 

## Extract the first business day of each month 
bizDates <- dates[isBizday(Dates, holidays=holidayLONDON())] 
firsts <- tapply(bizdates, months(bizdates), min) 
sapply(firsts, function(X) as.character(as.Date(X))) 
#   1   2   3   4   5   6 
# "2013-01-02" "2013-02-01" "2013-03-01" "2013-04-01" "2013-05-01" "2013-06-03" 
#   7   8   9   10   11   12 
# "2013-07-01" "2013-08-01" "2013-09-03" "2013-10-01" "2013-11-01" "2013-12-02" 
5

假設你想,是不是星期六或星期日每月的第一天:

businessDay<-function(month,year){ 
    #3 first dates of the month is sufficient 
    d <- as.POSIXlt(paste(year,month,1:3,sep="-")) 
    #POSIXlt object contains the info about the weekday as number 0-6 (starting Sunday) 
    d[which(d$wday>0 & d$wday<6)[1]] 
} 

businessDay(3,2013) 
[1] "2013-03-01" 

或者,如果你要想在一天的名稱:

businessDay<-function(month,year){ 
    d <- as.POSIXlt(paste(year,month,1:3,sep="-")) 
    weekdays(d[which(d$wday>0 & d$wday<6)[1]]) 
} 

businessDay(1,2013) 
[1] "friday" 
5

您可以使用isBusinessDayRQuantLib,它檢查是否有一天被賦予了日曆busniess一天。一種想法是給一個月的第一天,並採取分busniess日

例如這裏2009年4月的第一個工作日是:

library(RQuantLib) 
dates <- seq(from=as.Date("2009-04-01"), to=as.Date("2009-04-05"), by=1) 
min(dates[isBusinessDay("UnitedKingdom", dates)]) 
"2009-04-01" 
相關問題