2016-06-08 23 views
5

Non riesco a capire come trasformare Sys.Date() in un numero nel formato YYYYDDD. Dove DDD è il giorno dell 'anno, vale a dire 1 gennaio sarebbe 2.016.001 31 dicembre sarebbe 2016365Come convertire una data in YYYYDDD?

Date <- Sys.Date() ## The Variable Date is created as 2016-01-01 
SomeFunction(Date) ## Returns 2016001 
+0

@ katya-handler pratica ogni altro formato (data,) la funzione, non si rese conto% esistito Se altri esistono mi piacerebbe sapere, stava facendo riferimento a questo sito: [link] (http://www.statmethods.net/input/dates.html) – LanceS

+1

La sezione 'format' nella documentazione di [' as.Date'] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.Date.html) collega alla documentazione pertinente di ['strptime'] (https: //stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html dove sono elencate tutte le specifiche di conversione date-time. – RHertel

risposta

6

si può semplicemente utilizzare la funzione format come segue:

format(Date, '%Y%j') 

che dà:

[1] "2016161" "2016162" "2016163" 

Se si desidera formattare in altri modi, vedi ?strptime per tutte le possibili opzioni.

In alternativa, è possibile utilizzare i year e yday funzioni dalle data.table o lubridate pacchetti e incollarli insieme paste0:

library(data.table) # or: library(lubridate) 
paste0(year(Date), yday(Date)) 

che vi darà lo stesso risultato.


I valori restituiti da entrambe le opzioni sono di carattere di classe. Avvolgi le soluzioni di cui sopra in as.numeric() per ottenere numeri reali.


dati utilizzati:

> Date <- Sys.Date() + 1:3 
> Date 
[1] "2016-06-09" "2016-06-10" "2016-06-11" 
> class(Date) 
[1] "Date" 
+0

Così semplice. Grazie mille. – LanceS

+0

forse una domanda più profonda per aiutarmi ad imparare: come facevi a sapere che% j esisteva? Non mi sono imbattuto in questo altrove. – LanceS

+1

@LanceScadden Vedi '? Strptime' – Jaap

1

questo dovrebbe funzionare per la creazione di una nuova colonna con il formato della data specificata:

Date <- Sys.Date  
df$Month_Yr <- format(as.Date(df$Date), "%Y%d") 

Ma, specialmente quando si lavora con set di dati più grandi, è più facile fare quanto segue:

library(data.table) 
setDT(df)[,NewDate := format(as.Date(Date), "%Y%d" 

Spero che questo aiuti. Potrebbe essere necessario armeggiare se si desidera solo un valore e non si lavora con un set di dati.

+1

@mtoto ha una risposta semplice, se cerchi solo quel valore specifico. –

3

Ecco un'opzione con lubridate:

library(lubridate) 
x <- Sys.Date() 
#[1] "2016-06-08" 
paste0(year(x),yday(x)) 
#[1] "2016160" 
Problemi correlati