web-dev-qa-db-fra.com

Convertir la chaîne aaaammjj en classe Date dans R

Je voudrais convertir ces dates au format AAAAMMJJ en classe Date.

dates <- data.frame(Date = c("20130707", "20130706", "20130705", "20130704"))

J'ai essayé:

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

Et j'obtiens l'erreur suivante:

Error in as.Date.default(dates, "%Y%m%d") : 
  do not know how to convert 'dates' to class "Date"

Quelle serait la bonne façon de définir ce format?

23
rwn1v

Vous devez fournir la colonne Date, pas l'intégralité de data.frame.

R> as.Date(dates[["Date"]], "%Y%m%d")
[1] "2013-07-07" "2013-07-06" "2013-07-05" "2013-07-04"
17
GSee

Classic R:

> start_numeric <- as.Date('20170215', format = '%Y%m%d');
> start_numeric
[1] "2017-02-15"
> format(start_numeric, "%Y%m%d")
[1] "20170215"
5
d8aninja

Une conversion supplémentaire en personnages fonctionne pour moi:

dates<-as.Date(as.character(dates),format="%Y%m%d")

Sans la conversion, l'erreur suivante se produit:

dates<-as.Date(dates,format="%Y%m%d")
Error in as.Date.numeric(dates, format = "%Y%m%d") : 
  'Origin' must be supplied

Erreur différente mais cela pourrait aider, fonctionne également pour POSIXct, collez la date et les heures, format% Y% m% d% H

4
RJP

Utilisez le paquet de lubrification pour une conversion facile:

date_test <- data.frame(Date = c("20130707", "20130706", "20130705", "20130704"))
date_test$Date <- ymd(date_test$Date)

date_test
        Date
1 2013-07-07
2 2013-07-06
3 2013-07-05
4 2013-07-04
2
Stefan