R语言 如何将时间转换为十进制

jvlzgdj9  于 2023-10-13  发布在  其他
关注(0)|答案(4)|浏览(103)

我有一个包含hh:mm:ss格式时间的大型数据集,我想将这些转换为十进制格式,同时忽略小时(hh)。我使用了strptime,但这似乎并没有转换它。
更准确地说,我想把00:01:38变成1,6333,把01:18:30变成78,5
在R中该怎么做?

7nbnzgx9

7nbnzgx91#

可能有一个lubridate函数,但我会这样做:

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

忽略时间:

y%%60
#[1] 18.5
b1uwtaje

b1uwtaje2#

您可以使用stringsplitsapply

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
       }
)

测试结果:

[1]  1.633333 78.500000

作者:@Joris Meys
只是延伸了他的例子:How to convert time (mm:ss) to decimal form in R

f5emj3cl

f5emj3cl3#

编写一个函数来为您进行转换是相对简单的。假设你的输入是字符向量:

> 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
mkh04yzy

mkh04yzy4#

使用{lubridate},使用以下命令将HH:MM:SS字符串转换为分钟:

library(lubridate)
as.numeric(hms(c("00:01:38", "01:18:30")), "minutes")
[1]  1.633333 78.500000

相关问题