40 votes

Créer une date de fin de mois à partir d'une variable de date

J'ai une grande base de données avec des variables de date, qui reflètent le premier jour du mois. Existe-t-il un moyen facile de créer une nouvelle variable de date de trame de données qui représente le dernier jour du mois ?

Voici quelques exemples de données :

date.start.month=seq(as.Date("2012-01-01"),length=4,by="months")
df=data.frame(date.start.month)
df$date.start.month

"2012-01-01" "2012-02-01" "2012-03-01" "2012-04-01"

Je voudrais retourner une nouvelle variable avec :

"2012-01-31" "2012-02-29" "2012-03-31" "2012-04-30"

J'ai essayé ce qui suit, mais il a échoué :

df$date.end.month=seq(df$date.start.month,length=1,by="+1 months")

48voto

James Points 24725

Pour obtenir la fin des mois, vous pouvez simplement créer un vecteur Date contenant le 1er de tous les mois suivants et soustraire 1 jour.

date.end.month <- seq(as.Date("2012-02-01"),length=4,by="months")-1
date.end.month
[1] "2012-01-31" "2012-02-29" "2012-03-31" "2012-04-30"

15voto

Martien Lubberink Points 545

Utilisez timeLastDayInMonth à partir du package timeDate :

df$eom<-timeLastDayInMonth(df$somedate)

2voto

Oguz Points 21
library(lubridate)
 as.Date("2019-09-01") - days(1)
[1] "2019-08-31"

ou

library(lubridate)
 as.Date("2019-09-01") + months(1) - days(1)
[1] "2019-09-30"

1voto

hvollmeier Points 364

Une solution simple serait d'utiliser la fonction yearmon avec l'argument frac=1 du paquet xts. frac est un nombre entre 0 et 1 qui indique la fraction du chemin à travers la période que le résultat représente.

as.Date(as.yearmon(seq.Date(as.Date('2017-02-01'),by='month',length.out = 6)),frac=1)

[1] "2017-02-28" "2017-03-31" "2017-04-30" "2017-05-31" "2017-06-30" "2017-07-31"

Ou si vous préférez la « tuyauterie » en utilisant magrittr :

seq.Date(as.Date('2017-02-01'),by='month',length.out = 6) %>%
         as.yearmon() %>% as.Date(,frac=1)

[1] "2017-02-28" "2017-03-31" "2017-04-30" "2017-05-31" "2017-06-30" "2017-07-31"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X