Ich versuche eine Funktion zu erstellen, die automatisch das Datumsformat einer Spalte in einem Datenrahmen bestimmt und die korrekte asDate() - Funktion anwendet. In der Regel kommen die Daten in "% Y-% m-% d" oder "% m /% d /% y" (dies ändert sich je nachdem, ob die .csv in Excel geöffnet und gespeichert wurde).Funktion zum automatischen Anwenden des korrekten as.Date-Formats in R
Anfangs dachte ich, ein „if/else“ Anweisung funktionieren würde, und kam mit dem Follow-up:
if(nchar(df$date[[1]] == 10)){
df$Date <- as.Date(df$Date)
} else {
df$Date <- as.Date(df$Date, format = "%m/%d/%y"
Aber es wirft eine „Zeichenkette in einem Standard-Format eindeutig nicht“ Fehler.
Hier ist ein Beispieldatenrahmen mit arbeiten:
a <- seq(1:10)
dates1 <- c("3/21/16", "3/22/16", "3/23/16", "3/24/16", "3/25/16", "3/26/16", "3/27/16", "3/28/16", "3/29/16", "3/30/16")
dates2 <- c("2016-03-21", "2016-03-22", "2016-03-23", "2016-03-24", "2016-03-25", "2016-03-26", "2016-03-27", "2016-03-28", "2016-03-29", "2016-03-30")
df <- data.frame(a, dates1, dates2)
df$dates1 <- as.character(df$dates1)
df$dates2 <- as.character(df$dates2)
Die if/else-Anweisung sollte in der Lage sein, die Arbeit an „dates1“ und „dates2“, aber wie Sie sehen können, es funktioniert nur mit " dates2 "
if(nchar(df$dates1[[1]] == 10)){
df$dates1 <- as.Date(df$dates1)
} else {
df$dates1 <- as.Date(df$dates1, format = "%m/%d/%y")
}
if(nchar(df$dates2[[1]] == 10)){
df$dates2 <- as.Date(df$dates2)
} else {
df$dates2 <- as.Date(df$dates2, format = "%m/%d/%y")
}
Entschuldigung im Voraus für alle Formatierungsprobleme.
Sie müssen 'dput()' die Daten für uns in der Lage sein, dies zu lösen –
Dies sollte Ihre Bedenken beantworten. Es ist genau dasselbe, als was du falsch machst. Lösungen zur Überwindung dieses Problems bieten auch @dirk .............................. http: //stackoverflow.com/questions/14755425/Was-sind-die-Standard-Eindeutige-Datumsformate – user5249203
Ich denke ich kann raten, aber ich möchte, dass du ein reproduzierbares Beispiel gibst. Ihr grundsätzliches Problem ist, dass 'as.Date' standardmäßig vektorisiert wird; Sie müssen entweder nacheinander die Elemente von 'df $ Date 'durchgehen oder identifizieren, welche in welchem Format sind und diese separat konvertieren ... –