2015-02-05 27 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