2016-06-08 28 views
5

Ich kann nicht herausfinden, wie man Sys.Date() in eine Zahl im Format YYYYDDD umwandelt. Wo DDD der Tag des Jahres, dh 1. JANUAR wäre 2.016.001 31. Dezember 2016365Wie konvertiert man ein Datum in YYYYDDD?

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

@ katya-Handler Grundsätzlich ist jedes andere Format (Datum,) Funktion, war nicht klar% j existierte. Wenn andere existieren, würde ich gerne wissen, bezog sich auf diese Website: [link] (http://www.statmethods.net/input/dates.html) – LanceS

+1

Der 'Format' Abschnitt in der Dokumentation von [' as.Date'] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/as.Date.html) verweist auf die entsprechende Dokumentation von ['strptime'] (https: //stat.ethz.ch/R-manual/R-devel/library/base/html/strptime.html), wo alle Datum-Zeit-Konvertierungsspezifikationen aufgeführt sind. – RHertel

Antwort

6

Sie können nur die format Funktion wie folgt:

format(Date, '%Y%j') 

die gibt:

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

Wenn Sie es auf andere Weise zu formatieren, siehe ?strptime für alle möglichen Optionen.

Alternativ können Sie die year und yday Funktionen aus den data.table oder lubridate Pakete verwenden und sie zusammen mit paste0 einfügen:

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

, die Ihnen das gleiche Ergebnis.


Die Werte, die von beiden Optionen zurückgegeben werden, sind Klassenzeichen. Wickeln Sie die obigen Lösungen in as.numeric(), um reelle Zahlen zu erhalten.


Gebrauchte Daten:

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

So einfach. Danke vielmals. – LanceS

+0

vielleicht eine tiefere Frage, um mir zu helfen zu lernen: Woher wusstest du, dass% j existiert? Ich habe das nirgendwo anders gesehen. – LanceS

+1

@LanceScadden Siehe '? Strptime' – Jaap

1

wäre Dies sollte arbeiten, um eine neue Spalte mit dem angegebenen Datumsformat für die Erstellung von:

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

Aber, Insbesondere beim Arbeiten mit größeren Datensätzen ist es einfacher, Folgendes zu tun:

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

Hoffen, dass dies hilft. Muß vielleicht basteln, wenn du nur einen Wert willst und nicht mit einem Datensatz arbeitest.

+1

@ mtoto hat eine gute, einfache Antwort, wenn Sie nur nach diesem spezifischen Wert suchen. –

3

Hier eine Option ist mit lubridate:

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