2016-04-01 10 views
1

Ich möchte in R einen String Vektor von Daten wie konvertieren dies:Analysiere ein Datum von einem Format wie: "% B% d,% Y" in ein Format: "% Y-% m-% d" in R

[1] "March 21, 2016" "March 9, 2016"  "March 1, 2016"  "February 29, 2016" "January 26, 2016" "December 15, 2015" "December 14, 2015" 
[8] "November 9, 2015" "October 13, 2015" "August 26, 2015" "August 10, 2015" 

auf einen Vektor, der Daten wie folgt aus:

[1] "2016-03-21" "2016-03-09" 
..... 

ich bereits versucht haben, ohne Erfolg, mit dem String zu analysieren:

library(lubridate)  
format(mdy(dates),"%Y-%m-%d") 

und mit:

as.Date(dates, "%Y-%m-%d") 

In beiden Fällen ist das Ergebnis eine NA-Zeichenkette. Was ist los?

+0

Es kann auf Ihrem Standort ab. Was ist die Ausgabe von 'Sys.getlocale()'? – nicola

+0

"LC_COLLATE = Italienisch_Italien.1252; LC_CTYPE = Italienisch_Italien.1252; LC_MONETARY = Italienisch_Italien.1252; LC_NUMERIC = C; LC_TIME = Italienisch_Italien.1252" – maumag77

+0

Das ist das Problem. Ich habe eine Antwort gegeben, sieh dir das an. – nicola

Antwort

1

Das Problem ist, dass Ihre locale Namen der Monate erwartet in italienisch zu sein. Da sie in Ihrem Objekt in Englisch sind, werden die Daten nicht analysiert. Zum Beispiel sollte dies für Sie arbeiten (zum Glück auch Italienisch Ich bin):

dates <- "Marzo, 21 2016" 
library(lubridate)  
format(mdy(dates),"%Y-%m-%d") 
#[1] "2016-03-21" 

Um Ihre Reisedaten zu analysieren, müssen Sie das Gebietsschema ändern:

#register the old locale to set it back 
OL <- Sys.getlocale("LC_TIME") 
#set the new locale 
Sys.setlocale("LC_TIME","C") 
dates <- "March, 21 2016" 
format(mdy(dates),"%Y-%m-%d") 
#[1] "2016-03-21" 
#Change the locale back to the old value 
Sys.setlocale("LC_TIME", OL) 
+0

Perfekte Nicola! Es klappt! Tausend Dank ;-) – maumag77

3

Sie verwenden nicht die korrekten Date Werte. Versuchen Sie folgendes:

as.Date(dates, "%B %d, %Y") 
2
d<-"March 21, 2016" 
parse_date_time(d, orders="%B %d, %Y") 
Verwandte Themen