2017-06-28 86 views
1

我覺得必須有更乾淨的方式才能做到這一點。這是一個愚蠢的例子,但說我有data.frame像這樣(省略廢話明顯是具有恆定的區間):查找列間時間間隔

df = data.frame(date_time = seq(as.POSIXct("2017-05-29 08:15:00 UTC"), 
           as.POSIXct("2017-05-30 08:15:00 UTC"), by = "5 min"), 
       group = "temp") 

所以說,我其實沒有知道什麼區間爲或者它並不穩定。我的問題是找到列中日期間隔的最佳方法是什麼。我想出了一些使用一個循環,但如果有更好的解決方案,在那裏我很納悶:

int_time = c() 
for(i in 1:nrow(df)){ 
    tmp = as.numeric(df$date_time[i+1] - df$date_time[i]) 
    int_time = c(tmp, int_time) 
} 
+1

也許'的diff(DF $ DATE_TIME )'? – lmo

+0

Yikes是否讓我複雜化了。想把它作爲答案?然後我可以接受它。 – boshek

回答

3

diff接受了一些數據類型,並有一個方法專門爲POSIXt類的載體。在這種情況下

head(diff(df$date_time)) 

回報

Time differences in mins 
[1] 5 5 5 5 5 5 

因爲你正在服用的配對差異,你將失去一個觀察。要將它放回到數據集中,您有兩種選擇。

對於d_i = X_I - X_ {I-1},使用

df$int_time <- c(NA, diff(df$date_time)) 

對於d_i = X_ {I + 1} - X_I,使用

df$int_time <- c(diff(df$date_time), NA) 
+0

你能否推薦最好的方法將其添加回data.frame? '> df $ int_time < - diff(df $ date_time)'。然後這個錯誤'$ < - 。data.frame'中的錯誤('* tmp *',int_time,value = c(5,5,5,5,5:替換有288行,數據有289'' – boshek