2016-08-17 1 views
0

J'essaye de convertir un jour-jour dans le format d'année en mois/jour.convertir jour-jour dans le format d'année en mois/jour

Avec cette df:

set.seed(123) 
df1 <- data.frame(Year = rep(15,100), DayNum = seq(78,177,1), Hour = sample(0:23,100,replace = T)) 
df2 <- data.frame(Year = rep(16,100), DayNum = seq(78,177,1), Hour = sample(0:23,100,replace = T)) 

df <- rbind(df1, df2) 
> head(df) 
    Year DayNum Hour 
1 15  78 6 
2 15  79 18 
3 15  80 9 
4 15  81 21 
5 15  82 22 
6 15  83 1 
> tail(df) 
    Year DayNum Hour 
195 16 172 22 
196 16 173 11 
197 16 174 9 
198 16 175 15 
199 16 176 3 
200 16 177 13 

qui a 100 records pour 2015 et 2016, comment puis-je faire une colonne de date/heure POSIXct?

Bien qu'il y ait un certain nombre de messages liés avec une date julienne d'une origine de début (généralement 1970-01-01), je n'ai pas pu trouver des postes avec un jour dans une année et avec une année variable (c.-à-d. 2015 et 2016).

+0

Ce n'est pas une date "Julian", c'est juste le numéro du jour dans l'année. _Julian Date_ a une définition claire - _ "Le jour julien est le nombre continu de jours depuis le début de la période julienne utilisé principalement par les astronomes." _ - avec 0 = 1 janvier 4713 BC. – Aganju

+0

Vous pouvez changer votre origine pour être ce que vous voulez, par exemple '2015-01-01' – jgadoury

+0

@Aganju J'ai modifié la question pour refléter votre commentaire. –

Répondre

1

Vous pourriez avoir besoin quelque chose comme cela, utilisez %j pour indiquer le jour de l'année:

strptime(with(df, paste(Year, DayNum, Hour)), "%y %j %H") 

# [1] "2015-03-19 06:00:00 EDT" 
# [2] "2015-03-20 18:00:00 EDT" 
# [3] "2015-03-21 09:00:00 EDT" 
# [4] "2015-03-22 21:00:00 EDT" 
# [5] "2015-03-23 22:00:00 EDT" 
2

La fonction as.POSIXct a une option pour spécifier la date d'origine lors de la conversion d'une date « Julian » à l'objet date/heure:

#calculate the origin date based on the year column 
df$origin<-as.Date(paste0("20", df$Year,"-01-01")) 
#convert the Julian day to a date/time object 
as.POSIXct(df$JulianDay, origin=df$origin) 

On peut avoir besoin d'envisager d'ajouter l'option fuseau horaire complet:

as.POSIXct(df$JulianDay, origin=df$origin, tz="GMT")