2016-07-02 4 views
0

Suite fait partie de mes données:Modification du format de la date en r avec strptime et as.Date

 Date  Elev Temp.C 
1 02 January 2010 200 14.7 
2 02 January 2010 300 5 
3 02 January 2010 500 -2 
4 02 January 2010 1000 -9.8 
5 02 January 2010 2000 -7.1 

Je voulais changer le format de la date pour 2010-01-01 ou "%Y-%m-%d". Classe de data est character et j'ai essayé comme suit:

data$Date<-as.Date(data$Date,format="%d%B%Y") 

data$Date<-as.Date(data[["Date"]],"%d%B%Y") 

data$Date<-strptime(data$Date,"%d%B%Y") 

Tous les essais ci-dessus affichiez <NA> dans la colonne Date. J'ai un autre fichier de données avec le format de date de "%m/%d/%Y", il a bien fonctionné avec strptime, mais pour le jeu de données ci-dessus, il ne fonctionne pas. Une idée?

+0

@Zheyuan Li Que voulez-vous dire par «% B» est sensible? – G1124E

+0

@ Zheyuan Li "English_United States.1252" – G1124E

+0

@ZheyuanLi J'ai '' "2016-03-02" ' – G1124E

Répondre

1

Le problème est lié à vos paramètres régionaux. Si vous regardez ?strptime, vous verrez:

‘%B’ Full month name in the current locale. (Also matches 
     abbreviated name on input.) 

Cela signifie, %B est sensible à vos paramètres régionaux. Jetez un oeil à ?locales si vous ne savez pas ce qu'est une locale. Quand je vous ai demandé à propos de la sortie de Sys.getlocale("LC_TIME"), vous avez dit que vous avez obtenu "English_United States.1252". Maintenant, nous allons d'abord changer vos paramètres régionaux:

Sys.setlocale("LC_TIME", "C") 

Ensuite, faites:

as.Date("02 January 2010", "%d %B %Y") 
# [1] "2010-01-02" 

note, car il y a un espace vide entre « 02 », « Janvier » et « 2010 », vous devez laisser une espace vide entre %d, %B, %Y. Donc, ne pas utiliser "%d%B%Y" comme mis dans votre message, mais utilisez "%d %B %Y".