将毫秒数字转换为时间MM:SS,然后求和

时间:2019-05-18 18:02:36

标签: r class datetime time

建议使用hms包的替代方法,将数字转换为MM:SS,从而提供与difftime不同的类。

以下面的示例为例,我想将data.frame(当前以毫秒为单位)中的变量y转换为时间格式MM:SS以获得更高的总和。

library(hms)

x <- c('a','b')
y = c(256733,249800)
z <- data.frame(x,y)

z$y <- z$y/1000

z$y  <- as.hms(z$y)
class(z$y)

sum(z$y)

当前返回...

时差506.533秒

时间变量应最终为:

04:16 04:09

sum(z $ y)= 08:26

2 个答案:

答案 0 :(得分:0)

您可以使用lubridate软件包。 dplyr软件包仅用于简化数据操作。

library(lubridate)
library(dplyr)

# 1 milisecond = 0.001 second
mili_sec <- 0.001

x <- c('a','b')
y <- c(256733,249800)
z <- data.frame(x,y)
z <- z %>% 
  dplyr::mutate(y = y*mili_sec,
                y = lubridate::seconds_to_period(y),
                y = lubridate::parse_date_time(y, "%M %S"),
                H = base::format(y,"%M"),
                S = base::format(y,"%S"))
z
> z
  x                   y  H  S
1 a 0000-01-01 00:04:17 04 17
2 b 0000-01-01 00:04:10 04 10
endM <- sum(as.numeric(z$H))
endS <- sum(as.numeric(z$S))
base::format(lubridate::parse_date_time(paste(endM, endS), "%M %S"), "%M:%S")
[1] "08:27"

答案 1 :(得分:0)

另一个选择是使用lubridate::dmilliseconds

z$y1 <- dmilliseconds(z$y)
  x      y                       y1
1 a 256733 256.733s (~4.28 minutes)
2 b 249800   249.8s (~4.16 minutes)

> sum(z$y1)
[1] 506.533

使用seconds_to_periody1转换为MM:SS格式。