2017-09-28 5 views
0

Hey communautaire impressionnant,Conversion des valeurs numériques avec différentes longueurs (jour = 1-31) à ce jour format

alors je suis cet ensemble de données assez grand et malheureusement, les colonnes de date est dans le format suivant:

20112016 
28112016 
2122016 
6122016 
11122016 

C'est un format numérique simple. Comment puis-je le transférer au format de dates standard comme 02-12-2016.

betterDates <-as.Date(as.character(betterDates), "%e%m%Y") 
+0

devrait être '% d% m% Y' - ie' as.Date ('20112016', '% d% m% Y') '' – Sotos

+0

@Sotos que .Date ("6122016", format = "% d% m% Y") 'donne' NA'. – thelatemail

+0

@thelatemail n'a pas remarqué cela. Je suppose que 'sprintf' devrait prendre soin de cela - c'est-à-dire' as.Date (sprintf ('% 08d', 6122016), '% d% m% Y') ' – Sotos

Répondre

2

Le format des jours/mois doit être le même avec 2 chiffres, soit un total de 8 chiffres pour chaque date. Dans le cas où le jour est 1 ou 2 ou ... ou 9, nous pouvons utiliser sprintf pour les faire 01, 02, ..., 09, à savoir

x <-c(20112016, 28112016, 2122016, 6122016, 11122016) 

as.Date(sprintf('%08d', x), '%d%m%Y') 
#[1] "2016-11-20" "2016-11-28" "2016-12-02" "2016-12-06" "2016-12-11" 
+0

Merci pour cette réponse! Cela fonctionne très bien pour l'une des colonnes de date. Cependant, il y en a deux autres dans le même format, où il me donne une NA pour toutes les valeurs ... Comme il y a +1000000 personnes c'est difficile de trouver la raison ... Mais toutes sont au format mentionné plus haut. Y a-t-il un autre moyen de le faire? Le sprintf() fait cela dans les colonnes: 00000484 À la vôtre –

0

Le paquet lubridate est très pratique dans les situations suivantes:

x <-c(20112016, 28112016, 2122016, 6122016, 11122016) 
lubridate::dmy(x) 
[1] "2016-11-20" "2016-11-28" "2016-12-02" "2016-12-06" "2016-12-11" 
le format