我有一个十进制格式的时间:以小时为单位的22,13
,我想用R表示为HH:MM
。我的意思是,22:08
(贬值秒(
有人能帮我吗?
语法%02.0f
将值四舍五入为整数,并使其始终为2个单位。因此,7.8
分钟将转换为字符"08"
。
x <- c("22,13", "9,25", "7,8")
sprintf("%02d:%02.0f",
as.numeric(sub(",\d+", "", x)),
as.numeric(sub("\d+,", "0.", x)) * 60)
# [1] "22:08" "09:15" "07:48"
将字符串以数字形式扫描到s
中,除以24,这样我们就可以将其转换为times
类(因为times
需要一天的零头(,四舍五入到分钟,并删除后面的:00
library(chron)
x <- c("22,13", "5,20") # test data
s <- scan(text = x, dec = ",", quiet = TRUE)
sub(":00$", "", round(times(s/24), "min")) ##
## [1] "22:08" "05:12"
如果您更喜欢截断秒数,而不是四舍五入到最接近的分钟,则在标记为##的行中将round
替换为trunc
,或将整行替换为:
format(as.chron(s/24), format = "%H:%M") # truncate
转换回
如果y
是标记为##的行的结果,则它们分别转换回times
类和小时数。我们在最后一行中使用了round(..., 2)
,以获得与原始输入相同的位数,但如果这不重要,则可以省略。
y <- c("22:08", "05:12")
tt <- times(paste0(y, ":00"))
tt
## [1] 22:08:00 05:12:00
round(24 * as.numeric(tt), 2)
## [1] 22.13 5.20