I would like to calculate time differences (delta time) in R. The timestamps are stored in a two-column data frame with time as date-time (year-month-day hour:min: sec.msec), e.g. for first three rows:
c_id c_time
6875 2012-08-15 00:00:40.169
6874 2012-08-15 00:01:40.055
6876 2012-08-15 00:02:40.542
I would like to have an output a column with differences e.g.
c_diff
0
00:01:0.886
00:01:0.487
Can someone please tell me how to do this? If you have other/better suggestion how to keep the result, it will be greatly appreciated Thanks so much in advance! Mishu
You can use the difftime() function to calculate the time difference between two dates or datetimes in R.
Try this (I am assuming that you have your data in a data.frame
called mydf
) and that you want the difference between the first time stamp and all subsequent timestamps:
c_time <- as.POSIXlt( mydf$c_time )
difftime( c_time[1] , c_time[2:length(c_time)] )
#Time differences in secs
#[1] -59.886 -120.373
#attr(,"tzone")
#[1] ""
But in case you want the delta difference between subsequent timestamps you need to reverse your obsevations (because the first way round you get time1 - time2 which will be negative), so you can just use instead:
c_time <- rev( c_time )
difftime(c_time[1:(length(c_time)-1)] , c_time[2:length(c_time)])
#Time differences in secs
#[1] 60.487 59.886
#attr(,"tzone")
#[1] ""
I will not give you the entire answer, but this will help you almost get there:
x="2012-07-11 04:22:40.169"
datex=strptime(x,format='%Y-%m-%d %H:%M:%S') #this converts your date string
#into a date value recognized in r
y="2012-08-15 08:32:40.169"
datey=strptime(y,format='%Y-%m-%d %H:%M:%S')
time_diff=as.numeric(difftime(datey,datex)) #in decimal days
>35.17361
From decimal days you can then convert it back to whichever time format you want, but depending on what you want to do with it, you may want to keep it in a numeric form (perhaps in decimal hours, by multiplying time_diff by 24)...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With