стандартное отклонение времени в столбце в формате чч: мин: сек - PullRequest
0 голосов
/ 04 мая 2018

В вопросе "среднее время в столбце в формате hr: min: sec" приведен следующий пример:

Col_Time = c('03:08:20','03:11:30','03:22:18','03:27:39')
library(chron)
mean(times(Col_Time))
[1] 03:17:27

Как я могу получить значение hr: min: sec для стандартного отклонения? Если я использую функцию R sd , результат выглядит так:

sd(times(Col_Time))
[1] 0.006289466

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

sd работает с числом, внутренне представляющим время (дни для chron::times, секунды для hms и POSIXct, устанавливаемые для difftime), что вполне нормально. Единственная проблема заключается в том, что он удаляет класс из результата, поэтому он не печатается красиво. Решение, таким образом, заключается в простом преобразовании обратно во временной класс:

x <- c('03:08:20','03:11:30','03:22:18','03:27:39')

chron::times(sd(chron::times(x)))
#> [1] 00:09:03

hms::as.hms(sd(hms::as.hms(x)))
#> 00:09:03.409836

as.POSIXct(sd(as.POSIXct(x, format = '%H:%M:%S')), 
           tz = 'UTC', origin = '1970-01-01')
#> [1] "1970-01-01 00:09:03 UTC"

as.difftime(sd(as.difftime(x, units = 'secs')), 
            units = 'secs')
#> Time difference of 543.4098 secs
0 голосов
/ 04 мая 2018

Вы можете использовать lubridate пакет. Функция hms преобразует время из символов в формат HMS. Затем используйте seconds, чтобы преобразовать в секунды и рассчитать mean/sd. Наконец, используйте seconds_to_period, чтобы получить результат в формате HMS.

library(lubridate)
Col_Time = c('03:08:20','03:11:30','03:22:18','03:27:39')

#Get the mean
seconds_to_period(mean(seconds(hms(Col_Time))))
# [1] "3H 17M 26.75S"

#Get the sd
seconds_to_period(sd(seconds(hms(Col_Time))))
#[1] "9M 3.40983612739285S"
...