hr:min:sec 格式的列中时间的标准偏差
standard deviation of 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
您可以使用 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"
sd
对内部表示时间的数字进行操作([=12= 为天数,hms
和 POSIXct
为秒数,difftime
可设置) , 这很好。唯一的问题是它从结果中删除了 class,因此打印效果不佳。那么解决方案就是转换回 class 之后的时间:
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
在问题
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
您可以使用 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"
sd
对内部表示时间的数字进行操作([=12= 为天数,hms
和 POSIXct
为秒数,difftime
可设置) , 这很好。唯一的问题是它从结果中删除了 class,因此打印效果不佳。那么解决方案就是转换回 class 之后的时间:
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