r-如何用HH:MM表示十进制时间



我有一个十进制格式的时间:以小时为单位的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

最新更新