2015-02-05 48 views
1

我需要编写一个函数来计算后续时间戳和每次第一个时间戳之间的时间差。在数据集中约有80,000个时间戳。我写了下面的功能:提示需要时差功能或使用R中的Reduce

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或改善我自己功能的优雅。

--Cheers,矢量化tstev

回答

2

利用:

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这一点。

+0

哇谢谢队友!我正在寻找改进代码的方法,并且出现了“Reduce”。任何状况之下。非常感谢! – tstev 2015-02-05 14:34:44