【问题标题】:Computing number of seconds/msecs in a window计算窗口中的秒数/毫秒数
【发布时间】:2014-12-21 17:33:38
【问题描述】:

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

   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。

【问题讨论】:

  • c(0,diff(df$raw_timestamp_part_2))怎么样
  • 这让我更近了一步,但它只处理第一个元素,而不是新窗口的其余部分。 (但谢谢——我最初错过了!)
  • 我可能误解了这个问题。但是,无论如何,你有两个答案。一个基本的 R 解决方案是 with(df, ave(raw_timestamp_part_2, num_window, FUN=function(x) c(0, diff(x))))

标签: r time diff


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我喜欢使用data.tables 进行这种类型的操作:

    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
    

    【讨论】:

    • 谢谢——如果可能的话,我会接受这两个答案。我将使用 dplyr 的答案,这样我就不必在数据框和表格之间来回切换,但我很高兴看到这个以供将来参考。
    猜你喜欢
    • 2021-12-25
    • 2023-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2010-12-26
    相关资源
    最近更新 更多