我有一个向量 "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",格式为小时:分钟:秒 (例如:
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
使用 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
dput()
(至少在数据的子集上)。 - tospig试试这个。我们首先将其转换为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
而不是仅仅使用Time.Spent.Training
。 - David Arenburg使用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
以下是一些替代方案:
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"
可能是最直接的方法,而不需要安装额外的包,但是另一个答案已经提供了该方法。)
从日期时间列中提取小时列并创建一个新的小时列,只在该列中提供小时数据2011-01-01 00:00:01 答案:
bikeshare$hour<-sapply(bikeshare$datetime,function(x){format(x,"%H")})