Comment pourrais-je modifier les valeurs de date brutes. Par exemple.
> DF2 Date 1 11/01/2018 2 7/31/2014 3 6/10/2015 4 10/20/2017
Dans les valeurs de date modifiées, celle avec "/"
> DF2 Date 1 11012018 2 7312014 3 6102015 4 10202017
3 Réponses :
Utilisez lubridate pour toutes les tâches liées à la date et à l'heure
format(lubridate::mdy(c("11012018", "7/31/2014")), "%m/%d/%Y")
[1] "11/01/2018" "07/31/2014"
Vous pouvez également le formater si nécessaire:
XXX
En supposant: votre date est au format mois-date-année. Sinon, vous pouvez utiliser d'autres fonctions lubridate
Essayez l'entrée suivante dmy ("7312014")
@RonakShah l'a corrigé
OP a une entrée comme 7312014 et veut une sortie comme 7/31/2014 . Vous avez pris l'entrée en tant que 31/07/2014 .
Vérifiez leur sortie attendue, 31/07/2014 , ils veulent juste mettre des barres obliques comme séparateur, il n'est pas clair s'ils le veulent dans la classe de date.
Une solution possible pourrait être:
df <- data.frame(lapply(df, function(x) as.Date(as.character(x), "%m%d%Y")))
Et une autre qui peut convertir au format mm / jj / aaaa requis est la suivante:
df <- transform(df, V1 = as.Date(as.character(V1), "%d%m%Y"))
Les deux solutions sont via le package de base R.
Il s'agit du format mois-jour-année, voir la deuxième ligne à titre d'exemple: "31/07/2014"
Si c'est la réponse qu'ils veulent, tout va bien, mais c'est un message en double. Vérifiez leur sortie attendue, 31/07/2014 , ils veulent juste mettre des barres obliques comme séparateur, il n'est pas clair s'ils le veulent dans la classe de date.
Peut-être que j'étais confus, les données semblaient apparemment numériques ou entières. Heureux de supprimer ma réponse, si ce n'est pas le cas!
Nous pourrions également utiliser (il est supposé qu'il vous suffit d'ajouter un nouveau séparateur. Dans tous les cas, vous pouvez revenir au type date-heure):
test3<-c("11012018", "1112015", "7312014", "7312014", "10202017", "772007", "772007",
"7072007")
Modifier: Plus généralement, comme suggéré par @ jay.sf,
test4<-gsub("(^[0-1]?\\d)([0-3]?\\d)(\\d{4}$)","\\1 \\2 \\3",df$Date)
gsub(" ","/",test4)
#[1] "11/01/2018" "7/31/2014" "6/10/2015" "10/20/2017"
Ceci est pour tenir compte des formats de date tels que:
new<-gsub("([0-9]{,2})([0-9]{2})([0-9]{4})","\\1 \\2 \\3",df$Date)
gsub(" ","/",new)
#[1] "11/01/2018" "7/31/2014" "6/10/2015" "10/20/2017"
p >
gentil, comment généreriez-vous cela à par exemple 772017 ?
@ jay.sf Intéressant! Peut-être pourrions-nous le faire séparément comme ceci: test <- "772017"; test1 <-gsub ("([0-9] {, 2}) ([0-9] {, 1}) ([0-9] {4})", "\\ 1 \\ 2 \\ 3 ", test) Je vais voir si je peux écrire une solution plus générale.
Je soutiens cela. Essayez cette expression régulière "(^ [0-1]? \\ d) ([0-3]? \\ d) (\\ d {4} $)" et testez-la sur c (11012018, 1112015, 7312014, 7312014, 10202017, 772007, 772007, 7072007) .
@ jay.sf Ajouté à la réponse. Merci!
également pour "0772007" , mon code numérique a légèrement échoué
Voulez-vous que la colonne soit une classe de
caractèreoudate?Copie possible de stackoverflow .com / questions / 8398131 /…