我有一个包含hh:mm:ss格式时间的大型数据集,我想将这些转换为十进制格式,同时忽略小时(hh)。我使用了strptime,但这似乎并没有转换它。更准确地说,我想把00:01:38变成1,6333,把01:18:30变成78,5。在R中该怎么做?
00:01:38
1,6333
01:18:30
78,5
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
b1uwtaje2#
您可以使用stringsplit和sapply
stringsplit
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 } )
测试结果:
[1] 1.633333 78.500000
作者:@Joris Meys只是延伸了他的例子:How to convert time (mm:ss) to decimal form in R
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
mkh04yzy4#
使用{lubridate},使用以下命令将HH:MM:SS字符串转换为分钟:
library(lubridate) as.numeric(hms(c("00:01:38", "01:18:30")), "minutes") [1] 1.633333 78.500000
4条答案
按热度按时间7nbnzgx91#
可能有一个lubridate函数,但我会这样做:
忽略时间:
b1uwtaje2#
您可以使用
stringsplit
和sapply
测试结果:
作者:@Joris Meys
只是延伸了他的例子:How to convert time (mm:ss) to decimal form in R
f5emj3cl3#
编写一个函数来为您进行转换是相对简单的。假设你的输入是字符向量:
mkh04yzy4#
使用{lubridate},使用以下命令将HH:MM:SS字符串转换为分钟: