2016-04-25 13 views
0

Ich möchte ein YYYYMM-integer in ein Date umwandeln, ohne es in ein Zeichen umzuwandeln (= gibt es eine mdy-Funktion wie in SAS?). Ich möchte diesen Code ersetzen:Konvertiere ein yyyym-Integer nach Datum

dateint<-201511 
datestr<-paste(toString(dateint,length=8),'01') 
date<-as.Date(datestr,'%Y%m%d') 
print(date) 
class(date) 

mit einer funktionierenden Version von diesem. Wenn möglich, sollte die resultierende Klasse ein Datum sein:

year<-dateint %% 100 
month<-floor(dateint/100) 
date2<-ISOdate(year,month,1) # I can't make this work .. 
print(date2) 
class(date2) 

Dank & freundlichen Grüßen

+1

Bitte erläutern Sie, warum Ihre Lösung für Ihre Zwecke nicht ausreicht. Aufgrund von Schaltjahren (und den komplexen Regeln, die sie betreffen) ist eine Lösung, die eine Zeichenkette nicht analysiert (wodurch OS-Einrichtungen verwendet werden), nicht durchführbar. – Roland

+0

Warum ist die Umwandlung in Zeichen nicht ok? – mpiktas

+0

In meinen Augen ist es komisch, eine Zahl in ein Zeichen und dann wieder in eine Zahl (= Datum) umzuwandeln. Vielleicht ist das eine dumme Frage - oder lassen Sie mich die Frage so stellen: Würde jemand mit R-Erfahrung den ersten Code richtig programmieren? –

Antwort

4

Das Paket lubridate hat eine Funktion ymd, die numerische Eingabe akzeptiert:

> library(lubridate) 
> ymd(20151101) 
[1] "2015-11-01 UTC" 

Sie benötigen aber um den Tag am Ende hinzuzufügen.

+0

Es konvertiert intern in Zeichen. – Roland

+0

Ich habe nicht gesagt, dass es nicht :) – mpiktas

Verwandte Themen