2017-01-30 5 views
1

J'ai une colonne dans R sur mon ensemble de données avec des valeurs qui ont été converties en ce que je crois être une fraction décimale temporelle basée sur jours. J'utilise ce site comme une référence: http://www.calculatorsoup.com/calculators/time/decimal-to-time-calculator.phpConversion d'une décimale/fraction temporelle représentant des jours à son heure réelle dans R?

qui conversion 0.3408565 jours correspond au temps de 8:10:50 en procédant comme suit:

0.3408565 * 24 hours/day = 8.180555544 = 8 hours 

0.180555544 * 60 minutes = 10.83333264 = 10 minutes 

0.83333264 * 60 seconds = 49.9999584 = 50 seconds 

Comme vous pouvez le voir est extrayait le reste et faire multiplication supplémentaire, mais je ne suis pas sûr de la façon dont je pourrais mettre en œuvre le processus dans R. Je veux convertir toutes les valeurs dans ma colonne en utilisant cela afin que je puisse remplacer 0.3408565, 0.3864468, 0.4400231 etc. : 10: 50, 09:16:29, 10:33:38 respectivement. Cela semble être aussi le cas dans Excel.

J'ai essayé d'écrire ma propre fonction qui en anglais fait:

convertTime <- function(x) 
{ 
x * 60 = Hour 
x2 * 24 = Min 
x3 * 24 = Sec 

hourChar <- as.character(Hour) 
minChar <- as.character(Min) 
secChar <- as.character(Sec) 
paste(hourChar, minChar, secChar, sep=":") 
} 

x étant 0,3408565, mais bien sûr cela n'extrait pas le reste. Je pourrais être sérieusement trop compliqué, mais je veux boucler toutes les valeurs dans la colonne en utilisant chaque valeur comme entrée pour convertir. Enfin, j'ai regardé des paquets tels que 'lubridate' mais je ne trouve rien qui soit pertinent à mon problème.

J'ai également regardé ici pour ma situation spécifique mais n'ai pu trouver quelque chose de vraiment pertinent à mon problème. Y a-t-il un paquet ou une solution qui pourrait m'aider?

EDIT: Je veux dire que les deux réponses fonctionnent parfaitement pour quelqu'un d'autre ayant ce genre de problème, merci à vous deux!

Répondre

0

Voici une fonction personnalisée

convertTime <- function(x){ 
    Hour = (x * 24) %% 24 #For x>1, only the value after decimal will be considered 
    Minutes = (Hour %% 1) * 60 
    Seconds = (Minutes %% 1) * 60 

    hrs = ifelse (Hour < 10, paste("0",floor(Hour),sep = ""), as.character(floor(Hour))) 
    mins = ifelse (Minutes < 10, paste("0",floor(Minutes),sep = ""), as.character(floor(Minutes)))  
    secs = ifelse (Seconds < 10, paste("0",round(Seconds,0),sep = ""), as.character(round(Seconds,0))) 

    return(paste(hrs, mins, secs, sep = ":")) 
} 

USAGES

a = seq(0,1,0.2) 
convertTime(a) 
#[1] "00:00:00" "04:48:00" "09:36:00" "14:24:00" "19:12:00" "00:00:00" 

b = 0.3408565 
convertTime(b) 
# [1] "08:10:50" 
+0

Je viens d'essayer cette solution et cela fonctionne parfaitement pour ma situation, merci beaucoup! Par hasard, seriez-vous conscient de la façon dont une date peut également être convertie sans poser une autre question pour elle? Encore une fois, j'ai une date (41641) que je peux convertir au 02/01/2014, ce qui est 41641 le nombre de jours depuis le 01/01/1900. – IAmZingy

+0

'as.Date (41641, origin =" 1900-01-01 ")' –

+1

Ceci est parfait merci beaucoup pour votre aide, je dois juste le convertir en temps britannique que je vais trouver comment faire! Encore une fois merci beaucoup! – IAmZingy

1

Essayez times dans chron qui représente les temps sous forme de fractions d'un jour:

library(chron) 
format(times(0.3408565)) 
## [1] "08:10:50" 

Si vous avez quelque chose comme x = 3.3408565 jours cela peut être formaté comme:

x <- 3.3408565 
paste(x %/% 1, times(x %% 1)) 
## [1] "3 08:10:50" 

En ce qui concerne le sujet de la question, il ne sait pas ce qu'est un « temps réel dans R » signifie, mais des intervalles de temps peuvent être exprimés en "difftime" objets si vous voulez convertir x à un objet de classe R "difftime" alors:

as.difftime(x, units = "days") 
## Time difference of 3.340857 days 

ou si vous voulez soustraire x de la date/heure actuelle:

Sys.time() - as.difftime(x, units = "days") 
## [1] "2017-01-27 05:00:22 EST" 

Il y a aussi des informations qui peuvent être pertinentes dans la colonne R Help Desk de R Nouvelles 4/1 y compris des informations sur la conversion de la date Excel/fois en R - https://www.r-project.org/doc/Rnews/Rnews_2004-1.pdf

+0

J'ai aussi juste essayé cette méthode et encore, il fonctionne parfaitement pour ma situation, je vous remercie infiniment! – IAmZingy