【问题标题】:Aggregate sequential time recordings in R在 R 中聚合顺序时间记录
【发布时间】:2018-04-26 19:49:51
【问题描述】:

我正在尝试计算时间序列中的连续记录,并聚合这些序列的数据。

示例数据

这是一个以最大频率 1 秒采集的数据的示例:

timestamp   Value
06:07:23    0.439
06:07:24    0.556
06:07:25    0.430
06:07:26    0.418
06:07:27    0.407
06:07:47    0.439
06:07:48    0.420
06:07:49    0.405
09:55:21    0.507
09:55:22    0.439
10:03:24    0.439
10:03:25    0.439
10:03:36    1.708
10:03:37    0.608
10:03:38    0.439
10:03:46    0.484
10:03:47    0.380
10:03:48    0.607
10:03:49    0.439
10:03:50    0.439
10:03:51    0.439
10:03:52    0.430
10:03:53    0.439
10:03:54    4.924
10:03:55    1.012
10:03:56    0.887
10:03:57    0.439
10:03:58    0.439
10:04:18    0.447
10:04:19    0.447

可以看出,在某些时期,每秒都会获取一个值。如果观察结果之间没有差距,我正在尝试找到一种汇总方法,最终得到如下结果:

timestamp   max     duration
06:07:23    0.556   5
06:07:47    0.439   3
09:55:21    0.507   2
10:03:24    0.439   2
10:03:36    1.708   3
10:03:46    1.012   13
10:04:18    0.447   2

我正在努力寻找一种按顺序数据对数据进行分组的方法。我能找到的最接近的答案是this one,但是,答案是在三年半前提供的,我一直在努力让data.table 方法起作用。

任何想法都非常感谢!

【问题讨论】:

    标签: r data.table time-series aggregate


    【解决方案1】:

    这是data.table的尝试:

    dat[, 
      .(timestamp = timestamp[1], max = max(Value), duration=.N),
      by = cumsum(c(FALSE, diff(as.POSIXct(dat$timestamp, format="%H:%M:%S", tz="UTC")) > 1))
    ]
    
    #   cumsum timestamp   max duration
    #1:      0  06:07:23 0.556        5
    #2:      1  06:07:47 0.439        3
    #3:      2  09:55:21 0.507        2
    #4:      3  10:03:24 0.439        2
    #5:      4  10:03:36 1.708        3
    #6:      5  10:03:46 4.924       13
    #7:      6  10:04:18 0.447        2
    

    【讨论】:

    • 我正在尝试几乎相同的东西。我们也可以在data.table中使用as.ITime(timestamp)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-24
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多