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)
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)...