Преобразование числа миллисекунд в время MM: SS, а затем сумма - PullRequest
0 голосов
/ 18 мая 2019

Предложения альтернативы пакету hms для преобразования чисел в MM: SS, которые дали бы класс, отличный от difftime.

Возьмите следующий пример, я хочу преобразовать переменную y в data.frame (в настоящее время в миллисекундах) в формат времени 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

сумма (z $ y) = 08:26

Ответы [ 2 ]

0 голосов
/ 18 мая 2019

Другая опция использует 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_period для перевода y1 в формат MM: SS.

0 голосов
/ 18 мая 2019

Вы можете использовать пакет 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...