sheet - posixct to date r
R secuencia de fechas con lubricante (2)
Esta es una forma de POSIXct
dentro del universo POSIXct
de lubridate
y no cambiar los formatos de fecha a POSIXt
de R base. Evito cambiar el formato de fecha en mis scripts porque me parece que es un lugar común donde se presentan errores (por ejemplo, cambios de zona horaria o marcas de tiempo perdidas). Sigue este consejo para usar %m+%
: R: agregar 1 mes a una fecha
# example date is a leap day for a "worst case scenario"
library("lubridate")
posixct.in <- parse_date_time(x = "2016-02-29", orders = "ymd")
# [1] "2016-02-29 UTC"
posixct.seq <- posixct.in %m+% years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2017-02-28 UTC" "2018-02-28 UTC" "2019-02-28 UTC"
posixct.seq <- posixct.in %m+% months(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-29 UTC" "2016-04-29 UTC" "2016-05-29 UTC"
posixct.seq <- posixct.in %m+% days(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-01 UTC" "2016-03-02 UTC" "2016-03-03 UTC"
posixct.seq <- posixct.in %m+% weeks(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" "2016-03-07 UTC" "2016-03-14 UTC" "2016-03-21 UTC"
Un +
regular también funciona a veces, pero %m+%
evita errores como este:
posixct.seq <- posixct.in + years(x = seq.int(from = 0, to = 3, by = 1))
# [1] "2016-02-29 UTC" NA NA NA
Al principio estaba confundido porque pensaba que %m+
era solo una forma de agregar meses, y no lubridate
órdenes de lubridate
similares como %y+%
etc. Pero, resulta que la "m" no significa "mes adicional". Mi mejor conjetura es "magia" =)
Hola, estoy tratando de obtener una secuencia de fechas con Lubridate
Esto no funciona
seq(ymd(''2012-04-07''),ymd(''2013-03-22''),by=week(1))
el comando base
seq(as.Date(''2012-04-7''),as.Date(''2013-03-22''),''weeks'')
Sí, pero me gustaría saber si existe una forma elegante de hacerlo con lubricante.
EDITAR
Por favor ignore: me resolví, así que solo me quedo con la posteridad. Feliz de tener esto eliminado si es necesario.
seq(ymd(''2012-04-07''),ymd(''2013-03-22''),by=''weeks'')
Hace el truco
ymd
es un contenedor para analizar cadenas de fecha y devuelve un objeto POSIXct
.
Simplemente necesita usar la terminología estándar descrita en ?seq.POSIXt
(no lubridate
) para definir semanas
seq(ymd(''2012-04-07''),ymd(''2013-03-22''), by = ''1 week'')
seq(ymd(''2012-04-07''),ymd(''2013-03-22''), by = ''weeks'')
trabajará
como lo hará
seq(ymd(''2012-04-07''),ymd(''2013-03-22''), by = ''2 week'')
Podría forzar el objeto de la clase Period
lubridate
a un tiempo difftime
, pero eso parece bastante innecesario
seq(ymd(''2012-04-07''),ymd(''2013-03-22''), by = as.difftime(weeks(1)))