2016-04-13 18 views
0

Ich muss ein Datumsformat in ein anderes mit RStudio umwandeln, da für lubridate und andere datumsbezogene Funktionen ein standardmäßiges eindeutiges Format für die weitere Arbeit benötigt wird.Format der Datumsspalte ändern

Beispiel-Datensatz: Ich habe ein paar Beispiele und Informationen unten enthalten

Function,HiredDate,FiredDate 
Waitress,16-06-01 12:40:02,16-06-13 11:43:12 
Chef,16-04-17 15:00:59,16-04-18 15:00:59 

Aktuelles Datum Format (POSIXlt) von HiredDate und FiredDate:

"%y-%m-%d %H:%M:%S" 

Was ich das Datumsformat wollen von HireDate und FiredDate zu sein:

"%Y-%m-%d %H:%M:%S"/2016-06-01 12:40:02 

oder

"%Y/%m/%d %H:%M:%S"/2016/06/01 12:40:02 
+0

POSIXlt hat kein spezifisches Datumsformat. Wenn Sie einen POSIXlt-Vektor drucken, wird ein bestimmtes Format verwendet, um den Zeitstempel in ein Zeichen zu konvertieren, das dann gedruckt wird. Sie können das Format des Charakters mit 'format()' steuern. – Stibu

+0

Ich habe versucht, folgendes umzuwandeln: 1. benutze ymd() aus dem Schmierungspaket, um mein Datum in das entsprechende Format zu konvertieren ||||||||||||||||| 2. Konvertieren Sie meine Spalte in eine date.class, aber verlieren Sie meine Zeit. ||||||||||||||||| 3. versuchen, POSIXct zu verwenden, um irgendwie mein Datum zu bekommen ||||||||||||||||| Also im Grunde habe ich nicht versucht, etwas wie strftime zu verwenden, es ist sehr schwierig, andere Beispiele zu finden. * – BrahminXy

Antwort

1

Grundsätzlich Sie Datum und Uhrzeit zum Beispiel mit der strftime Funktion umwandeln können:

d <- "2016-06-01 12:40:02" 
    strftime(d, format="%Y/%m/%d %H:%M:%S") 
    [1] "2016/06/01 12:40:02" 

In Ihrem Fall das Jahr verursachen Probleme:

d <- "16-06-01 12:40:02" 
    strftime(d, format="%Y/%m/%d %H:%M:%S") 
    [1] "0016/06/01 12:40:02" 

Wie Dave2e vorgeschlagen hat, kann das zweistellige Jahr von% y gelesen werden:

strftime(d, format="%y/%m/%d %H:%M:%S") 
    [1] "16/06/01 12:40:02" 

Unter der Annahme, dass Ihre Daten aus dem 20sten und 21. Jahrhundert kommt, können Sie eine 19 oder 20 vor dem HireDate und FireDate einfügen:

current <- 16 
    prefixHire <- ifelse(substr(data$HireDate, 1, 2)<=currentYear,20,19) 
    prefixFire <- ifelse(substr(data$FireDate, 1, 2)<=currentYear,20,19) 
    data$HireDate = paste(prefixHire, data$HireDate, sep="") 
    data$FireDate = paste(prefixFire, data$FireDate, sep="") 

Der Code ein Präfix erzeugt unter der Annahme, dass jedes Datum aus einem Jahr größer als die aktuelle ('16) ist eigentlich aus dem 20. Jahrhundert. Das Präfix wird dann in HireDate und FireDate eingefügt.

+0

Das hat sehr gut funktioniert, dass ifelse construct mit substring ist etwas, was ich für zukünftige Manipulationen im Kopf behalten muss, das scheint sehr praktisch. Danke, schönen Tag noch. – BrahminXy

+0

Verwenden Sie% y zum Lesen von 2-stelligen Jahren und% Y für 4-stellige Jahre. Wann verwenden Sie% y - Jahre ohne Jahrhundert (00-99). Bei der Eingabe werden den Werten 00 bis 68 20 und 69 bis 99 mit 19 vorangestellt – Dave2e

Verwandte Themen