列中的时间标准偏差,以hr:min:sec格式表示

时间:2018-05-04 17:01:54

标签: r chron

在问题"average time in a column in hr:min:sec format"中,给出了以下示例:

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 :(得分:3)

sd正在使用内部代表时间的数字(chron::times的天数,hmsPOSIXct的秒数,可设置为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

答案 1 :(得分:1)

您可以使用lubridate包。 hms函数会将时间从字符转换为HMS格式。然后使用seconds转换为秒并计算mean/sd。最后,使用seconds_to_periodHMS格式获得结果。

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"