¿Cómo restar / agregar días de / a una fecha?

Intento crear carpetas para almacenar datos extraídos. Quiero etiquetar las carpetas con el día de esos datos en la extracción.

Ex. Extraigo datos de hace 5 días de mysql. Quiero nombrar la carpeta con la fecha de hace 5 días.

MySQL puede manejar fácilmente la aritmética de fechas. No estoy seguro de cómo lo hace R exactamente. ¿Debo simplemente restar el número apropiado de segundos en POSIXct y luego convertir a POSIXlt para nombrar la carpeta MM_DD_YYYY?

¿O hay un mejor camino?

Solo resta un número:

> as.Date("2009-10-01") [1] "2009-10-01" > as.Date("2009-10-01")-5 [1] "2009-09-26" 

Como la clase Date solo tiene días, puedes hacer aritmética básica en ella.

Si desea utilizar POSIXlt por alguna razón, puede usar sus ranuras:

 > a <- as.POSIXlt("2009-10-04") > names(unclass(as.POSIXlt("2009-10-04"))) [1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst" > a$mday <- a$mday - 6 > a [1] "2009-09-28 EDT" 

La respuesta probablemente dependa del formato en que se encuentre su fecha, pero aquí hay un ejemplo usando la clase Date :

 dt <- as.Date("2010/02/10") new.dt <- dt - as.difftime(2, unit="days") 

Incluso puedes jugar con diferentes unidades como semanas.

Por supuesto, hay una solución lubridate para esto:

 library(lubridate) date <- "2009-10-01" ymd(date) - 5 # [1] "2009-09-26" 

es lo mismo que

 ymd(date) - days(5) # [1] "2009-09-26" 

Otros formatos de tiempo podrían ser:

 ymd(date) - months(5) # [1] "2009-05-01" ymd(date) - years(5) # [1] "2004-10-01" ymd(date) - years(1) - months(2) - days(3) # [1] "2008-07-29"