2017-05-30 6 views
1

J'ai une trame de données contenant une colonne de temps avec une horloge de 24 heures:Pourquoi strftime change-t-il mes heures en R?

canopy_understory trap_no   file_name  date  time temp light_intensity 
       <chr> <int>    <chr> <dttm> <time> <dbl>   <dbl> 
1     c  11 trap11c_160314.txt1 16-01-09 14:00:00 35.542    41 
2     c  11 trap11c_160314.txt2 16-01-09 15:00:00 28.953    4 
3     c  11 trap11c_160314.txt3 16-01-09 16:00:00 27.468    1 

Pour supprimer la colonne secondes je lance ce code sur dans R:

all_files_hobo$time <- strftime(all_files_hobo$time, format = "%H:%M")    

Après avoir couru ce code, je le dataframe suivant

canopy_understory trap_no   file_name  date time temp light_intensity 
       <chr> <int>    <chr> <dttm> <chr> <dbl>   <dbl> 
1     c  11 trap11c_160314.txt1 16-01-09 06:00 35.542    41 
2     c  11 trap11c_160314.txt2 16-01-09 07:00 28.953    4 
3     c  11 trap11c_160314.txt3 16-01-09 08:00 27.468    1 

Comme vous pouvez le voir, les secondes ont disparu et la colonne a changé par rapport, mais les temps sont également différents. C'est problématique. Je pourrais juste ajouter 8 à chaque fois, mais je crains qu'il y ait quelque chose de plus insidieux qui se passe ici et que les choses vont se gâter dans un proche avenir. Pourquoi strftime change-t-il mon temps?

+0

Lecture de l'homme que je pense est un problème de décalage horaire, mais je ne sais toujours pas comment résoudre ce problème. – 5r9n

+0

Définissez le fuseau horaire en utilisant l'argument 'tz' de' strftime' – SymbolixAU

+0

Que dois-je définir le fuseau horaire pour qu'il ne change rien? – 5r9n

Répondre

3

Étant donné que la colonne de temps ne contient aucune information TZ, UTC est supposé, puis strftime utilise la différence entre cela et votre TZ local dans la conversion.

Essayez donc:

all_files_hobo$time <- strftime(all_files_hobo$time, format = "%H:%M", tz = "UTC") 
0

ou essayez

library(lubridate) 
all_files_hobo$time <-hms(all_files_hobo$time)