2016-11-07 75 views
2

我有POSIXct數據的載體,要計算連續元素之間的差別,就像它是由diff比較差異POSIXct與單位,像difftime

完成如:

burst <- as.POSIXct(c("2016-11-07 17:20:52","2016-11-07 16:21:52", "2016-11-07 15:21:52", "2016-11-02 17:20:52","2016-11-02 16:21:52", "2016-11-02 15:21:52")) 

conti <- as.POSIXct(c("2016-11-07 17:20:52","2016-11-06 17:20:52", "2016-11-05 17:20:52", "2016-11-04 17:20:52","2016-11-03 17:20:52", "2016-11-02 17:20:52")) 

diff(burst) 
diff(conti) 

我的問題是,單位不相等。我記得difftime這個函數有一個叫做unit的參數,但是我不能構造一個apply函數來得到類似於diff的simiral行爲。

+0

我沒有得到你的問題;請分享你想要的樣本輸出! –

回答

0

我不確定是否有辦法對POSIXt對象執行特定單位diff。如果沒有,可以直接使用數值,然後設置類和單位屬性,這樣您仍然會擁有帶有單位屬性的difftime對象。

例如,獲得差異分鐘:

burst.diff = diff(as.numeric(burst))/60 
burst.diff = as.difftime(burst.diff, units="mins") 

burst.diff 
Time differences in mins 
[1] -59 -60 -7141 -59 -60 

如果你不關心維護對象類或單位,那麼你可以這樣做:

burst.diff = diff(as.numeric(burst))/60 

您可以將其作爲函數打包。我不知道這是如何我已經處理類術語的「正確」的方法和屬性,我很想知道,如果有更好的方法來做到這一點:

my_difftime = function(x, units="mins") { 

    div = c("secs"=1, "mins"=60, "hours"=3600) 

    if(is.na(match(units, names(div)))) { 
    stop('Please specify either units as either "secs", "mins", or "hours"') 
    } else { 
    x = diff(as.numeric(x))/div[match(units, names(div))] 
    as.difftime(x, units=units) 
    } 
} 

lapply(list(burst=burst, conti=conti), my_difftime, units="hours") 
$burst 
Time differences in hours 
[1] -0.9833333 -1.0000000 -119.0166667 -0.9833333 -1.0000000 

$conti 
Time differences in hours 
[1] -24 -25 -24 -24 -24