将 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),然后使用 hour
和min
参数以实现输出
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")})
我有一个格式为 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),然后使用 hour
和min
参数以实现输出
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")})