我需要编写一个函数来计算每次后续时间戳和第一次时间戳之间的时间差。在数据集中,大约有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
发布于 2015-02-05 14:26:02
利用矢量化的优势:
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。
https://stackoverflow.com/questions/28345951
复制相似问题