将时:分:秒转换为分钟

23

我有一个向量 "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中完成这个任务。

非常感谢。

Matt


Time.Training向量是使用URL从Google Sheets中提取的。它以hh:mm:ss格式进入R。希望将其转换为分钟,以便为运动员计算训练负荷。 - Matt Jordan
5个回答

23

使用 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
这个可行。我使用的确切代码是:library(lubridate); res <- hms(load$Time.Spent.Training); load$Time.Minutes<-hour(res)*60 + minute(res)。谢谢。 - Matt Jordan
1
不客气。在你提出的问题中,@David Arenburg的方法也是可行的。如果你想要基于实际数据得到答案,你应该考虑使用dput()(至少在数据的子集上)。 - tospig

15

试试这个。我们首先将其转换为POSIXlt类,通过使用Sys.Date()函数将实际日期粘贴到向量中(因为在基础R中没有小时类),然后使用hourmin参数以获得输出。

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

1
数据表名为'load',变量名为'Time.Spent.Training'。我使用了命令:attach(load),然后是Res <- as.POSIXlt(paste(Sys.Date(), Time.Spent.Training))。这给出了一个日期向量2015-03-15。但我似乎无法从中获取时间。 - Matt Jordan
你需要从数据集中调用你的列。尝试使用load$Time.Spent.Training而不是仅仅使用Time.Spent.Training - David Arenburg

11

使用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

10

以下是一些替代方案:

1) chron包中有一个"times"类,其中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和矩阵/向量乘法。不需要任何包:

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

(使用"POSIXlt"可能是最直接的方法,而不需要安装额外的包,但是另一个答案已经提供了该方法。)


-2

从日期时间列中提取小时列并创建一个新的小时列,只在该列中提供小时数据2011-01-01 00:00:01 答案:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接