web-dev-qa-db-fra.com

Comment convertissez-vous la date POSIX en jour de l'année en R?

Le titre l'indique: comment convertir une date POSIX en jour de l'année?

39
Gregor

Une alternative consiste à formater l'objet "POSIXt" en utilisant 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

ce qui est préférable à rappeler que le jour des années est basé sur zéro dans la norme POSIX.

51
Gavin Simpson

Comme le révèle ?POSIXlt, un suffixe $yday associé à une date POSIXlt (ou même un vecteur de ce type) sera converti en jour de l'année. Attention, POSIX comptant le 1er janvier comme étant le jour 0, vous voudrez peut-être ajouter 1 au résultat.

J'ai mis longtemps à trouver cela, alors j'ai pensé que je demanderais et répondrais à ma propre question

Sinon, l'excellent package lubridate fournit la fonction yday, qui n'est qu'un wrapper pour la méthode ci-dessus. Il définit commodément des fonctions similaires pour d'autres unités (month, year, hour, ...).

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

Je me rends compte que ce n’est pas tout à fait ce que recherchait l’affiche, mais j’avais besoin de convertir POSIX date -times en une journée fractional de l’année pour l’analyse de séries chronologiques et a fini par le faire:

today <- Sys.time()

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

Voici comment je le fais:

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