【发布时间】:2020-06-25 18:54:08
【问题描述】:
我有一个十进制格式的时间:22,13 以小时为单位,我想在 R 中将其表示为 HH:MM。我的意思是,22:08(贬值秒数)
谁能帮帮我?
【问题讨论】:
我有一个十进制格式的时间:22,13 以小时为单位,我想在 R 中将其表示为 HH:MM。我的意思是,22:08(贬值秒数)
谁能帮帮我?
【问题讨论】:
将字符串扫描成数字形式的s,除以24,以便我们可以将其转换为times 类(因为times 预计是一天的一小部分),将其四舍五入到分钟并删除尾随的@ 987654324@
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
【讨论】:
%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"
【讨论】: