以hh:mm为单位创建32Hz的时间序列:ss
问题描述:
我想创建一个从00:00:00到00:38:24间隔1/32秒的时间序列。这意味着很多次会重复,但没关系。以hh:mm为单位创建32Hz的时间序列:ss
我已经试过:
require(lubridate)
#Convert 00:38:24 to seconds
timeEnd<-period_to_seconds(hms("00:38:24"))
>timeEnd
[1] 2304
#Total number of elements in sequence
timeEnd*32Hz=73728 elements
#Create a sequence from 0 to timeEnd in 1/32 steps
t<-seq(0,timeEnd,by=1/32) #This bit is wrong! makes 73729 elements
#Convert to 00:00:00 format
sprintf('%02d:%02d:%02d', seconds_to_period(t)@hour, minute(seconds_to_period(t)), second(seconds_to_period(t)))
>t[1:5]
[1] "00:00:00" "00:00:00" "00:00:00" "00:00:00" "00:00:00"
- 有没有更好的解决办法?
- 序列中元素的数量错误。它应该是73728,但我得到73729.为什么?
答
我不知道这是否是更好的解决方案;但只使用base和stringi,并使用一个函数作为包装来增加灵活性。时间值可以作为一个字符传递,时间以分数或其他方式递增。
f <- function(start_time = "00:00:00", end_time = "00:38:24",
time_inc = 1/32, ...){
options(digits.secs=4)
tl <- lapply(list(start_time, end_time), function(i){
as.POSIXct(i, format = "%H:%M:%OS", tz = "EST")
})
as_seq <- seq(tl[[1]], tl[[2]], by = time_inc)
stringi::stri_datetime_format(as_seq, format = "HH:mm:ss:SSSS")
}
time.seq <- f()
> head(time.seq)
[1] "00:00:00:0000" "00:00:00:0310" "00:00:00:0620" "00:00:00:0930" "00:00:00:1250" "00:00:00:1560"
> tail(time.seq)
[1] "00:38:23:8430" "00:38:23:8750" "00:38:23:9060" "00:38:23:9370" "00:38:23:9680" "00:38:24:0000"
73729元素是正确的。例如。步骤= 1的从0到2的序列是'c(0,1,2)',即3个元素不是2,因为它也包括初始零。 – digEmAll