How to convert time to decimal

2019-01-12 11:54发布

I have a large data set containing time in hh:mm:ss format and I would like to convert these to a decimal format while ignoring the hours (hh). I have used strptime but this does not seem to convert it.

To be more precise I would like to change 00:01:38 into 1,6333 and 01:18:30 into 78,5.

How do I do this in R?

标签: r time
3条回答
欢心
2楼-- · 2019-01-12 11:56

There is probably a lubridate function for this, but I'd do it like this:

x <-  "01:18:30"

y <- (as.numeric(as.POSIXct(paste("2014-01-01", x))) - 
   as.numeric(as.POSIXct("2014-01-01 0:0:0")))/60
#[1] 78.5

Ignoring the hours:

y%%60
#[1] 18.5
查看更多
做个烂人
3楼-- · 2019-01-12 12:06

It's relatively trivial to write a function which does the conversion for you. Assuming your input is character vectors:

> decimateTime=function(time) {
+     time=as.numeric(unlist(strsplit(time, ":")))
+     time = time[1]*60+time[2]+time[3]/60
+     return(time)
+ }
> times=c('00:01:38', '01:18:30', '13:18:01')
> print(sapply(times,decimateTime))
00:01:38   01:18:30   13:18:01 
1.633333  78.500000 798.016667 
查看更多
我只想做你的唯一
4楼-- · 2019-01-12 12:23

You can use stringsplit and sapply

dat<-c('00:01:38','01:18:30')
sapply(strsplit(dat,":"),
       function(x) {
         x <- as.numeric(x)
         x[1]*60+x[2]+x[3]/60
       }
)

Result:

[1]  1.633333 78.500000

Credits go to @Joris Meys

Just extended his example: How to convert time (mm:ss) to decimal form in R

查看更多
登录 后发表回答