9

我想计算 R 中的时间差(增量时间)。时间戳存储在两列数据框中,时间为日期时间(年月日小时:分钟:秒.毫秒),例如前三个行:

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

我想输出一个有差异的列,例如

c_diff
0
00:01:0.886
00:01:0.487

有人可以告诉我该怎么做吗?如果您有其他/更好的建议如何保持结果,将不胜感激提前非常感谢!米舒

4

2 回答 2

7

试试这个(我假设你有你的数据data.frame被调用mydf)并且你想要第一个时间戳和所有后续时间戳之间的差异:

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] ""

编辑

但是,如果您想要后续时间戳之间的差异差异,您需要反转您的观察(因为第一轮您得到 time1 - time2 这将是负数),所以您可以改用:

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] ""
于 2013-03-19T17:24:24.613 回答
1

我不会给你完整的答案,但这将帮助你几乎到达那里:

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

然后,您可以从十进制天数将其转换回您想要的任何时间格式,但根据您想要对其执行的操作,您可能希望将其保留为数字形式(可能是十进制小时数,将 time_diff 乘以 24)。 ..

于 2013-03-19T17:35:25.917 回答