将小时:分钟:秒转换为分钟
Posted
技术标签:
【中文标题】将小时:分钟:秒转换为分钟【英文标题】:Convert hours:minutes:seconds to minutes 【发布时间】:2015-05-18 00:13:40 【问题描述】:我有一个格式为小时:分钟:秒的向量“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 中有一种直接的方法。
非常感谢。
马特
【问题讨论】:
Time.Training 向量正在使用 url 从 Google 表格中提取。它以 hh:mm:ss 格式进入 R。希望将其转换,以便我可以计算运动员的训练负荷,但我需要在几分钟内完成。 【参考方案1】:从日期时间列中获取小时列并创建一个新的 cloumn 小时并在该列中仅提供小时数据 2011-01-01 00:00:01 答: bikeshare$hour
【讨论】:
【参考方案2】:使用 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
【讨论】:
【参考方案3】:这里有一些替代方案:
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"
可能是没有包的最直接的方法,但另一个答案已经提供了。)
【讨论】:
【参考方案4】:使用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
【讨论】:
这行得通。我使用的确切代码是: library(lubridate); res 不客气。在问题中给出的示例中,@David Arenburg 的方法也有效。如果您想根据实际数据获得答案,您应该考虑使用dput()
(至少在数据的子集上)。【参考方案5】:
试试这个。我们基本上转换为POSIXlt
类,首先使用Sys.Date()
函数将真实日期粘贴到向量中(因为在基础R 中没有小时类),然后使用hour
和min
参数以实现输出
Res <- as.POSIXlt(paste(Sys.Date(), Time.Training))
Res$hour*60 + Res$min
## [1] 60 45 30 90
【讨论】:
数据表称为'load',变量称为'Time.Spent.Training'。我使用了命令:attach(load) 后跟 Res 您需要从数据集中调用您的列。试试load$Time.Spent.Training
,而不是Time.Spent.Training
。以上是关于将小时:分钟:秒转换为分钟的主要内容,如果未能解决你的问题,请参考以下文章