我的数据包括从实验开始点开始的以小时为单位的时间点。 实验通常需要一周以上,因此小时数很容易超过24小时。
准确地说,数据采用以下格式: 162:43:33.281 HHH:MM:ss.msecs 在实验开始时,数据点可能只包含1-2个这里提到的3个小时的插入值。
当我尝试减去2次点时,我得到一个错误,指出数值表达式具有例如162:43元素,这显然是指时间注释中使用的冒号。
关于如何处理由小时值超过24的时间变量的任何想法? 我尝试了strptime函数,以%H作为参数,但这限制了我24小时。
以下是一些示例数据:
V1 V2 V3 V4 V5
75:45:32.487 NA 17 ####revFalsePoke is 112 TRUE
75:45:32.487 NA 17 ####totalwindow is 5 TRUE
75:46:32.713 NA 1 ####Criteria not met TRUE
75:46:49.846 NA 6 ####revCorrectPoke is 37 TRUE
75:46:52.336 NA 9 ####revDeliberateLick is 34 TRUE
75:46:52.351 NA 9 ####totalwindow is 5 TRUE
75:46:52.598 NA 1 ####Criteria not met TRUE
75:47:21.332 NA 6 ####revCorrectPoke is 38 TRUE
75:47:23.440 NA 9 ####revDeliberateLick is 35 TRUE
75:47:23.455 NA 9 ####totalwindow is 6 TRUE
75:47:23.657 NA 1 ####rev Criteria not met TRUE
75:47:44.731 NA 17 ####revFalsePoke is 113 TRUE
75:47:44.731 NA 17 ####totalwindow is 6 TRUE
答案 0 :(得分:1)
不幸的是,你将不得不为此推出自己的转换器功能。我建议将时间戳转换为difftime
个对象(代表持续时间,而不是位置)。然后,您可以将它们添加到某个开始日期时间,以达到每个时间戳的最终日期时间。这是一种方法:
f <- function(start, timestep) {
result <- mapply(function(part, units) as.difftime(as.numeric(part), units=units),
unlist(strsplit(timestep, ':')),
c('hours', 'mins', 'secs'),
SIMPLIFY=FALSE)
start + do.call(sum, result)
}
start <- as.POSIXct('2013-1-1')
timesteps <- c('162:43:33.281', '172:34:28.33')
lapply(timesteps, f, start=start)
# [[1]]
# [1] "2013-01-07 18:43:33.280 EST"
#
# [[2]]
# [1] "2013-01-08 04:34:28.32 EST"