web-dev-qa-db-fra.com

Convertir le facteur en date / heure en R

Voici les informations contenues dans mon dataframe:

## minuteofday: factor w/ 89501 levels "2013-06-01 08:07:00",...
## dDdt: num 7.8564 2.318 ...
## minutes: POSIXlt, format: NA NA NA

J'ai besoin de convertir la colonne des minutes du jour au format date/heure:

minuteave$minutes <- as.POSIXlt(as.character(minuteave$minuteofday), format="%m/%d/%Y %H:%M:%S")

J'ai essayé as.POSIXlt, as.POSIXct et as.Date. Rien de tout cela n'a fonctionné. Quelqu'un at-il des idées.

Le but est de tracer les minutes contre dDdt, mais cela ne me laissera pas tracer dans la période de temps spécifiée que je veux en tant que facteur. Je ne sais pas quoi essayer ensuite ...

14
elle11e

Vous devez insérer une as.character() avant l'analyse en tant que Datetime ou Date.

Un facteur reviendra toujours en premier sous la forme d'un nombre correspondant à son niveau.

Vous pouvez enregistrer la conversion de facteur en caractère en indiquant read.csv() etc à aucun magasin comme facteur: stringsAsFactors=FALSE. Vous pouvez également définir cela comme une option globale.

Une fois que vous l'avez comme caractère, assurez-vous que faites correspondre la chaîne de format à vos données :

R> as.POSIXct("2013-06-01 08:07:00", format="%Y-%m-%d %H:%M:%S")
[1] "2013-06-01 08:07:00 CDT"
R> 

Notez le %Y-%m-%d Que j'ai utilisé, par opposition à votre %m/%d/%y.

Edit on 3 Jan 2016: C'est maintenant beaucoup plus facile grâce au paquet à tout moment qui convertit automatiquement de nombreux types, y compris factor, et le fait sans nécessiter de chaîne de format .

R> as.factor("2013-06-01 08:07:00")
[1] 2013-06-01 08:07:00
Levels: 2013-06-01 08:07:00
R> 
R> library(anytime)
R> anytime(as.factor("2013-06-01 08:07:00"))
[1] "2013-06-01 08:07:00 CDT"
R> 
R> class(anytime(as.factor("2013-06-01 08:07:00")))
[1] "POSIXct" "POSIXt" 
R> 

Comme vous pouvez le voir, nous introduisons simplement la variable facteur dans anytime() et le type POSIXct souhaité apparaît.

20
Dirk Eddelbuettel

Essaye ça

library(lubridate) minuteave$minutes <- ymd_hms(minuteave$minutes)

cela renverra minuteave $ minutes en tant qu'objet POSIXct.

J'espère que cela vous aidera.

7
darkage