我有一个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")