Saltar al contenido

Sume/reste 6 meses (tiempo de enlace) en R usando lubridate

Después de tanto trabajar hemos encontrado la respuesta de esta dificultad que algunos usuarios de nuestra web presentan. Si deseas aportar algún dato no dejes de aportar tu comentario.

Solución:

los lubridate función %m+% puede ser útil aquí:

Sumar y restar meses a una fecha sin exceder el último día del nuevo mes

as.Date("2014-12-31") %m+% months(6)
# [1] "2015-06-30"

Para manejar también el segundo caso, deberá redondear al mes más cercano usando ceiling_datey resta un día usando days.

ceiling_date(as.Date("2014-02-28") %m+% months(6), unit = "month") - days(1)
# [1] "2014-08-31"

Acabo de codificar esto rápidamente, pero creo que debería funcionar. Sin embargo, no estoy seguro de si es la solución más elegante.

# up = 1, down = -1
six.mo.mover<-function(date,up.or.down) 
  last.day <- month(date) != month(as.Date(date)+1) 
  if(last.day) 
    adj.date <- as.Date(date) - day(as.Date(date)-1) + up.or.down*months(6)
    adj.mo <- month(adj.date)
    if (adj.mo == 2) 
      dy <- 28 + leap_year(year(adj.date))
    
    else 
      dy <- 31-(adj.mo-1)%%7%%2
    
    adj.date + days(dy-1)
   
  else 
    as.Date(date)+up.or.down*months(6)
  

NB: no depurado, así que compruébelo usted mismo y hágamelo saber.

Ten en cuenta mostrar esta sección si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *