¿Cómo se convierte la fecha POSIX al día del año en R?

El título lo tiene: ¿cómo se convierte una fecha POSIX a día de año?

Una alternativa es formatear el objeto "POSIXt" usando strftime() :

 R> today <- Sys.time() R> today [1] "2012-10-19 19:12:04 BST" R> doy <- strftime(today, format = "%j") R> doy [1] "293" R> as.numeric(doy) [1] 293 

lo cual es preferible a recordar que el día de los años está basado en cero en el estándar POSIX.

Como ?POSIXlt revela, un sufijo de $yday a una fecha POSIXlt (o incluso un vector de tal) se convertirá al día del año. Tenga en cuenta que POSIX cuenta el 1 de enero como el día 0, por lo que es posible que desee agregar 1 al resultado.

Me llevó demasiado tiempo encontrar esto, así que pensé en preguntar y responder a mi propia pregunta .

Alternativamente, el excelente paquete lubridate proporciona la función yday , que es solo una envoltura para el método anterior. Define convenientemente funciones similares para otras unidades ( month , year , hour , …).

 today <- Sys.time() yday(today) 

Me doy cuenta de que no es exactamente lo que el póster estaba buscando, pero necesitaba convertir los tiempos de POSIX en un día fraccional del año para el análisis de series temporales y terminé haciendo esto:

 today <- Sys.time() doy2015f<-difftime(today,as.POSIXct(as.Date("2015-01-01 00:00", tzone="GMT")),units='days') 

Esta es la forma en que lo hago:

 as.POSIXlt(c("15.4", "10.5", "15.5", "10.6"), format = "%d.%m")$yday # [1] 104 129 134 160