计算窗口中的秒数/毫秒数

时间:2014-12-21 17:33:39

标签: r time diff

我有一个包含2列的数据集,我想用它来生成第3列。它是基于时间的数据,看起来像这样:

   raw_timestamp_part_2 num_window 
1                788290         11
2                808298         11
3                820366         11
4                120339         12
5                196328         12
6                304277         12
7                368296         12
8                440390         12
9                 28311         13
10                56286         13

我希望新列在窗口内是毫秒。因此,对于新窗口,我的新列中的值应为0,否则应该是当前时间戳与上一个时间戳之间的差异。

diff(df$raw_timestamp_part_2)让我接近,但是在窗口中第一次观察它并没有给我0。

2 个答案:

答案 0 :(得分:6)

dplyr解决方案。如果数据被称为df,那么您可以

library(dplyr)

group_by(df, num_window) %>%
    mutate(newCol = c(0, diff(raw_timestamp_part_2)))

#    raw_timestamp_part_2 num_window newCol
# 1                788290         11      0
# 2                808298         11  20008
# 3                820366         11  12068
# 4                120339         12      0
# 5                196328         12  75989
# 6                304277         12 107949
# 7                368296         12  64019
# 8                440390         12  72094
# 9                 28311         13      0
# 10                56286         13  27975

答案 1 :(得分:4)

我喜欢使用data.table来进行此类操作:

library(data.table)
##
dt <- data.table(df)
dt[
  ,delta:=c(0,diff(raw_timestamp_part_2)),
  by=num_window]
##
R> dt
    raw_timestamp_part_2 num_window  delta
 1:               788290         11      0
 2:               808298         11  20008
 3:               820366         11  12068
 4:               120339         12      0
 5:               196328         12  75989
 6:               304277         12 107949
 7:               368296         12  64019
 8:               440390         12  72094
 9:                28311         13      0
10:                56286         13  27975