提示需要带时差函数或者在R中使用Reduce

Tips need with time difference function or using Reduce in R

我需要编写一个函数,每次计算后续时间戳与第一个时间戳之间的时间差。在数据集中大约有 80,000 个时间戳。我编写了以下函数:

timeDIFF <- function(data){
  t_diff <- rep(0,length = nrow(data))
  for (i in 2:nrow(data)){
    t_diff[i] <- as.numeric(difftime(data["TimeStamp"][i,],
                                     data["TimeStamp"][1,],
                                     units="hours"))
  }
  return(t_diff)
}

顺便提一下提高优雅的一般技巧,欢迎!

到 运行 不需要那么长时间,但考虑到我将收到更多的观察结果,时间会显着增加。然后我遇到了 Reduce() 函数并写了这样的东西:

x <- strptime(date$TimeStamp,format="%Y-%m-%d %H:%M:%OS")
f <- function(a,b) as.numeric(difftime(b,a,units="hours"))
t_diff <- Reduce(f,x)

首先,它并不完全符合我的要求,因为理论上它会取后续时间戳之间的差异,而不仅仅是第一个时间戳。我认为这也可以解决 - 只是不确定如何解决。但是,更重要的是,我收到以下错误:

Error in as.POSIXct.numeric(time1) : 'origin' must be supplied

当我提供 origin 时,出现以下错误:

Error in difftime(b, a, units = "hours", origin = "1970-01-01") : 
  unused argument (origin = "1970-01-01") 

有什么建议吗?也许使用 Reduce 或改进我自己的功能的优雅。

--干杯,tstev

利用矢量化:

times <- as.POSIXct("2015-02-05 12", format = "%Y-%m-%d %H", tz = "GMT") + (0:3) * 3600
#[1] "2015-02-05 12:00:00 GMT" "2015-02-05 13:00:00 GMT" "2015-02-05 14:00:00 GMT" "2015-02-05 15:00:00 GMT"

as.numeric(difftime(times[-1], times[1], units="hours"))
#[1] 1 2 3

我不确定你为什么认为你应该为此使用 Reduce