我如何在R中将数字转换为小时和分钟?

smtd7mpg  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(292)

我有一个变量,其形式为在一项活动中花费的分钟数。我想通过考虑数字而不产生秒数来将此数字转换为小时和分钟。下面是一个示例:

minutes<-c(81.4398, 50.9903,107.5511,433.3051,10.1234)
minutes

我希望以时钟格式显示结果:

hrsmins<- c(1:21,0:51,1:48,7:13,0:10)

请注意,结果,显示时钟时间的一天,但小时和分钟的活动。我有一个非常大的数据集(数百万集)。所以,我会很感激,如果有人能提供一个有效的方法来做这个转换。

klr1opcd

klr1opcd1#

我们可以尝试使用chron

library(chron)
substr(times((minutes%/%60 +  minutes%%60 /60)/24), 1, 5)
#[1] "01:21" "00:50" "01:47" "07:13" "00:10"

也可能是

sub(":\\d{2}", "", times((minutes%/%60 +  minutes%%60 /3600)/24))
#[1] "01:21" "00:51" "01:48" "07:13" "00:10"
tcomlyy6

tcomlyy62#

实际上,这个问题似乎想将数据舍入(而不是截断?)到最接近的分钟,并显示为小时和分钟。
有很多软件包可以让你把数据保存为时间变量,并把它四舍五入到最接近的分钟(chrondata.tablelubridatehms),但是他们没有提供很好的文档来说明如何格式化结果和删除秒。

minutes<-c(81.4398, 50.9903,107.5511,433.3051,10.1234, 119.99)

## With Chron but formatting isn't working correctly?
format(chron::as.times(round(minutes)/60/24), "h:m")
#> [1] "0121" "0051" "0148" "0713" "0010" "0200"
substr(as.character(chron::as.times(round(minutes)/60/24)), 1, 5)
#> [1] "01:21" "00:51" "01:48" "07:13" "00:10" "02:00"

## With data.table
substr(as.character(round(data.table::as.ITime(minutes*60), "minutes")), 1, 5)
#> [1] "01:21" "00:51" "01:48" "07:13" "00:10" "02:00"

## With hms
substr(as.character(hms::round_hms(hms::hms(minutes = minutes), secs = 60)), 1,5)
#> [1] "01:21" "00:51" "01:48" "07:13" "00:10" "02:00"

## Doesn't work as I'd expect?
format(hms::round_hms(hms::hms(minutes = minutes), secs = 60), "%H:%M")
#> [1] "01:21:00" "00:51:00" "01:48:00" "07:13:00" "00:10:00" "02:00:00"

创建于2023年3月3日,使用reprex v2.0.2

相关问题