创建一个在每个间隙之后增加的索引,否则会逐渐增加行

时间:2014-09-02 05:08:47

标签: r dataframe subset

我有一个samples数据框,其中包含一些间隔时间戳(1秒间隔)的读数。

                      TS           Pressure     Temperature
[...]
8  2014-08-26 00:18:26.8                105              30
9  2014-08-26 00:18:27.8                108              32
10 2014-08-26 00:18:28.8              109.9              31
11 2014-08-26 00:34:20.8                109              20
12 2014-08-26 00:34:21.8                100              24
13 2014-08-26 00:34:22.8                 95              22
[...]

我在一些感兴趣的事件中只有记录(例如,当Pressure < 110时)并且在这些事件之外没有任何记录。

我想为Pressure < 110的每个“期间”提供一个唯一的ID 我创建了另一个数据框EventBoundaryIndex,其中包含每个句点的边界索引和相应的ID号:

> EventBoundaryIndex
     fromIndex  toIndex  eventID
1            1       10        1
2           11       30        2
[...]

读取:事件#1应跨越samples[0:10, ],事件#2跨越samples[11:30, ]等。
现在,我想在原始eventID数据框中添加samples行,以指明每条记录属于哪个eventID

                      TS           Pressure     Temperature   EventID
[...]
8  2014-08-26 00:18:26.8                105              30         1
9  2014-08-26 00:18:27.8                108              32         1
10 2014-08-26 00:18:28.8              109.9              31         1
11 2014-08-26 00:34:20.8                109              20         2
12 2014-08-26 00:34:21.8                100              24         2
13 2014-08-26 00:34:22.8                 95              22         2
[...]

我试过了:

samples$eventID[EventBoundaryIndex$from : EventBoundaryIndex$to] 
        <- EventBoundaryIndex$eventID

但这不起作用 我想我需要某种形式的apply,但无法找到正确的方法。


如果你能想到一个更简单的方法,每当在两个连续的时间戳之间检测到超过1秒的“间隙”时,我的eventID索引就会增加,请告诉我!

1 个答案:

答案 0 :(得分:1)

 samples$eventID <- cumsum(c(TRUE,diff(as.POSIXct(samples$TS))>1))
 samples
 #                      TS Pressure Temperature eventID
 #8  2014-08-26 00:18:26.8    105.0          30       1
 #9  2014-08-26 00:18:27.8    108.0          32       1
 #10 2014-08-26 00:18:28.8    109.9          31       1
 #11 2014-08-26 00:34:20.8    109.0          20       2
 #12 2014-08-26 00:34:21.8    100.0          24       2
 #13 2014-08-26 00:34:22.8     95.0          22       2