在R中的一个新变量中将H:M:S转换为分钟



我有一个H:M:S格式的时间变量,我想创建一个新的变量,将其转换为分钟。Ie-1:30:00在一个新的变量中将被记录为90。

这是我正在使用的,但没有运行,有什么建议吗?

library(dplyr)
library(lubridate)
DF <- c("1:00:00", "1:30:00", "00:45:00")
Time <- hms(DF)
DFTime <- Time %>% mutate(TimeMins = hour(Time)*60 + mins(Time))
head(DFTime$TimeMins)

使用hms中的as_hms

library(hms)
as.numeric(as_hms(v1))/60
[1] 60 90 45

或使用base R

rowSums((read.table(text = v1, sep=":", header = FALSE) * list(3600, 60, 0))/60)
[1] 60 90 45

数据

v1 <- c("1:00:00", "1:30:00", "00:45:00")

您可以使用as.Time函数(在data.table包中(和内置函数as.integer:

library(data.table)
DF <- c("1:00:00", "1:30:00", "00:45:00")
as.integer(as.ITime(DF) %/% 60L)
# [1] 60 90 45

注意:转换时间的小数部分将被删除!!

我对您的代码进行了两次更改:

  • 我使用lubridate中的minute函数,而不是mins
  • 我将时间转换为数据帧,以便mutate函数可以工作

library(dplyr)
library(lubridate)
DF <- c("1:00:00", "1:30:00", "00:45:00")
Time <- data.frame(Time = hms(DF))
DFTime <- Time %>% mutate(TimeMins = hour(Time)*60 + minute(Time))
head(DFTime$TimeMins)
# results
# [1] 60 90 45

在R基中使用asPOSIXlt

tt <- as.POSIXlt(paste(Sys.Date(), x))
rowSums(mapply((x, y) unclass(tt)[[x]]*y/60, 1:3, c(0, 60, 60^2)))
# [1] 60 90 45

数据:

x <- c("1:00:00", "1:30:00", "00:45:00")

最新更新