Konvertieren Sie TT / MM / JJ und TT / MM / JJJJ in Datumsangaben

Ich habe einen Zeichenvektor mit Daten in verschiedenen Formaten wie diesem

dates <- c("23/11/12", "20/10/2012", "22/10/2012" ,"23/11/12")

Ich möchte diese in Daten konvertieren. Ich habe den sehr guten dmy aus dem lubridate-Paket ausprobiert, aber das funktioniert nicht:

    dmy(dates)
[1] "0012-11-23 UTC" "2012-10-20 UTC" "2012-10-22 UTC" "0012-11-23 UTC"

Es behandelt das Jahr / 12 so, als wäre es 0012.

Daher versuche ich nun, mit regulären Ausdrücken jeden Typ auszuwählen und mit as.Date () einzeln in Datumsangaben zu konvertieren. Der reguläre Ausdruck, den ich versucht habe, nur TT / MM / JJ auszuwählen, funktioniert jedoch nicht.

dates[grep('[0-9]{2}/[0-9]{2}/[0-9]{2,2}', dates)]

kehrt zurück

[1] "23/11/12"   "20/10/2012" "22/10/2012" "23/11/12"

Ich dachte, dass die {2,2} genau 2 Zahlen bekommen sollte und nicht alle. Ich bin nicht sehr gut im regulären Ausdruck, daher wird jede Hilfe geschätzt.

Vielen Dank

BEARBEITEN

Was ich tatsächlich habe, sind drei verschiedene Arten von Datumsangaben

dates <- c("23-Jul-2013", "23/11/12", "20/10/2012", "22/10/2012" ,"23/11/12")

Und ich möchte diese in Daten umwandeln

parse_date_time(dates,c('dmy'))

gibt mir

[1] "2013-07-23" "0012-11-23" "2012-10-20" "2012-10-22" "0012-11-23"

Dies ist jedoch falsch und 0012 sollte 2012. Ich möchte (eine ziemlich einfache) Lösung dafür.

Eine Lösung, die ich jetzt habe (dank @plannapus), ist die Verwendung regulärer Ausdrücke, die ich letztendlich erstellt habe, da ich immer noch einige Fälle erlebte, in denen der Lubridat-Ansatz 12 in 0012 umwandelte

    asDateRegex <- function(dates, 
        #selects strings from the vector dates using regexes and converts these to Dates
        regexes = c('[0-9]{2}/[0-9]{2}/[0-9]{4}', #dd/mm/yyyy
            '[0-9]{2}/[0-9]{2}/[0-9]{2}

Das ist aber nicht sehr elegant. Irgendwelche besseren Lösungen?

, #dd/mm/yy '[0-9]{2}-[[:alpha:]]{3}-[0-9]{4}'), #dd-mon-yyyy orders = 'dmy', ...){ require(lubridate) new_dates <- as.Date(rep(NA, length(dates))) for(reg in regexes){ new_dates[grep(reg, dates)] <- as.Date(parse_date_time(dates[grep(reg, dates)], order = orders)) } new_dates } asDateRegex (dates) [1] "2012-10-20" "2013-07-23" "2012-11-23" "2012-10-22" "2012-11-23"

Das ist aber nicht sehr elegant. Irgendwelche besseren Lösungen?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage