将 hours:minutes:seconds 转换为分钟

Convert hours:minutes:seconds to minutes

我有一个格式为 hours:minutes:seconds 的矢量“Time.Training”(例如

Time.Training <- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")

我想将其转换为分钟格式:

Time.Training.Minutes <- c(60, 45, 30, 90)

我想知道是否有人有在 R 中执行此操作的直接方法。

非常感谢。

马特

试试这个。我们基本上首先转换为 POSIXlt class,方法是使用 Sys.Date() 函数将真实日期粘贴到向量(因为 base R 中没有小时 class),然后使用 hourmin参数以实现输出

Res <- as.POSIXlt(paste(Sys.Date(), Time.Training))
Res$hour*60 + Res$min
## [1] 60 45 30 90

使用lubridate:

Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")

library(lubridate)
res <- hms(Time.Training)        # format to 'hours:minutes:seconds'
hour(res)*60 + minute(res)       # convert hours to minutes, and add minutes
## [1] 60 45 30 90

这里有一些备选方案:

1) chron 包有一个 "times" class 其中 1 个单位是一天,一天有 60 * 24 分钟所以:

library(chron)
60 * 24 * as.numeric(times(Time.Training))

给予:

[1] 60 45 30 90

1a) 另一种使用 chron 的方法如下(给出相同的答案):

library(chron)

ch <- times(Time.training)
60 * hours(ch) + minutes(ch)

2) 这是使用 read.table 和 matrix/vector 乘法的方法。不需要软件包:

c(as.matrix(read.table(text = Time.Training, sep = ":")) %*% c(60, 1, 1/60))

(使用 "POSIXlt" 可能是没有包的最直接的方法,但另一个答案已经提供了。)

使用as.difftime:

> Time.Training<- c("1:00:00", "0:45:00", "0:30:00", "1:30:00")
> strtoi(as.difftime(Time.Training, format = "%H:%M:%S", units = "mins"))
[1] 60 45 30 90

从日期时间列中取出小时列并创建一个新列小时,并仅在该列中提供小时数据 2011-01-01 00:00:01 并且:

bikeshare$hour<-sapply(bikeshare$datetime,function(x){format(x,"%H")})