Il est parfois utile d’avoir la liste des jours fériés pour une ou plusieurs années données. J’en ai eu besoin cet été lors de travaux auprès de Freakonometrics. En regardant ce qui avait été dit sur une discussion du forum developpez.net, et plus particulièrement de ce que davcha indique, j’ai codé quelques lignes pour avoir ces jours fériés, sous R.

Beaucoup de jours fériés sont calculés par rapport à la date de Pâques. Pour obtenir cette dernière, on peut utiliser l’algorithme de Thomas O’Beirne.

# Retourne la date de Paques pour une annee donnee
paques <- function(annee){
n=annee-1900
a=n%%19
a2=a*7+1
b=a2%/%19
c=11*a-b+4
c=c%%29
d=n%/%4
d2=n-c+d+31
e=d2%%7
P=25-c-e
mars_31=paste(annee,"-03-31",sep="")
return(as.Date(mars_31, format="%Y-%m-%d")+P)
}

On peut alors utiliser la fonction suivante pour calculer tous les jours fériés pour une année donnée.

# Retourne la liste des jours feries pour l'annee donnee
jours_feries <- function(annee){
# Premier janvier
prem_janv=as.Date(paste(annee,"-01-01",sep=""), format="%Y-%m-%d")
# Paques
dim_paques=paques(annee)
#Lundi de Paques
lundi_paques=paques(annee)+1
# 1er Mai
prem_mai=as.Date(paste(annee,"-05-01",sep=""), format="%Y-%m-%d")
# 8 Mai
huit_mai=as.Date(paste(annee,"-05-08",sep=""), format="%Y-%m-%d")
# Jeudi de l'Ascension
jeudi_asc=as.Date(paques(annee)+39, format="%Y-%m-%d") #on compte paques
# Lundi de Pentecote
lundi_pent=paques(annee)+50
# 14 Juillet
quatorze_juill=as.Date(paste(annee,"-07-14",sep=""), format="%Y-%m-%d")
# 15 Aout
quinze_aout=as.Date(paste(annee,"-08-15",sep=""), format="%Y-%m-%d")
# 1er Novembre
prem_nov=as.Date(paste(annee,"-11-01",sep=""), format="%Y-%m-%d")
# 11 Novembre
onze_nov=as.Date(paste(annee,"-11-11",sep=""), format="%Y-%m-%d")
# 25 Decembre
noel=as.Date(paste(annee,"-12-25",sep=""), format="%Y-%m-%d")
return(c(prem_janv=prem_janv,dim_paques=dim_paques,lundi_paques=lundi_paques,prem_mai=prem_mai,huit_mai=huit_mai,jeudi_asc=jeudi_asc,lundi_pent=lundi_pent,quatorze_juill=quatorze_juill,quinze_aout=quinze_aout,prem_nov=prem_nov,onze_nov=onze_nov,noel=noel))
}

En bonus, voici un rapide moyen d'obtenir une data frame où les colonnes sont les années.

periode=2011:2012
res=sapply(periode,jours_feries,simplify=TRUE)
colnames(res)=paste("an",as.character(periode),sep="")
res

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Time limit is exhausted. Please reload CAPTCHA.