tipos quimicos quimico polar ionico enlaces enlace ejercicios covalentes covalente coordinado r lubridate

quimicos - Agregue/reste 6 meses(tiempo de enlace) en R usando lubricante



tipos de enlaces covalentes (2)

Estoy buscando sumar y restar seis meses de manera confiable con lubricante.

Por ejemplo, 12/31/2014 -> 30/06/2015 y 2/28/2014 -> 8/31/2014

etc.

El problema con as.Date("2014-12-31")+months(6) , es que produce una NA . Alternativamente, el segundo resultado es el 28/8/2014 porque no solo agrega 6 meses al mes y luego sabe dónde debería terminar el día dependiendo del mes.

¿Hay alguna manera de corregir esto rápidamente? En este momento, estoy creando una función para usar básicamente un interruptor y considerar cada mes, pero esto es muy largo y también tengo problemas con él.

¡Gracias!


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 está depurado, así que compruébalo tú mismo y avísame.


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

Suma y resta 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_date y restar un día usando days .

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