在R中减去超过24小时的时间数据

在R中减去超过24小时的时间数据,r,R,我的数据由时间点组成,以小时为单位,从实验的开始点开始。 实验通常需要一周以上的时间,因此时间很容易超过24小时 准确地说,数据的格式如下: 162:43:33.281 hhh:mm:ss.ms 在实验开始时,这里提到的3个小时内的数据点可能只包含1-2个值 当我尝试减去2倍的点时,我得到一个错误,指出数值表达式有例如162:43个元素,这显然是指时间注释中使用的冒号 关于如何处理由超过24小时的小时值组成的时间变量,有什么想法吗? 我尝试了strtime函数,参数为%H,但这将我的时间限制为2

我的数据由时间点组成,以小时为单位,从实验的开始点开始。 实验通常需要一周以上的时间,因此时间很容易超过24小时

准确地说,数据的格式如下: 162:43:33.281 hhh:mm:ss.ms 在实验开始时,这里提到的3个小时内的数据点可能只包含1-2个值

当我尝试减去2倍的点时,我得到一个错误,指出数值表达式有例如162:43个元素,这显然是指时间注释中使用的冒号

关于如何处理由超过24小时的小时值组成的时间变量,有什么想法吗? 我尝试了strtime函数,参数为%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

不幸的是,您将不得不为此推出自己的转换器函数。我建议将时间戳转换为
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"

f您必须使用类似于
strsplit
和整数数学的东西。我以前回答过类似的问题,但现在找不到。相关的整数数学可能是
%%
%%/
。有关详细信息,请使用
帮助(“%%”)
。我不清楚你的问题到底是什么。Matthew:我尝试了你的代码,但是当我尝试在我自己的数据上运行函数时,我得到了以下错误消息:strsplit中的错误(timesteps,“:”):非字符参数。我认为这与我的数据不是在向量中,而是在数据帧中有关。我试着做的是:timesteps Matthew,我试着做的是:>test f lappy(test,f,start=start)$V1[1]“2114-12-09 08:56:13 PST”#####是我得到的结果,这似乎是所有时间点的总和请在您的问题中提供一些示例数据。