2014-09-02 40 views
1

我有一個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)和不具備這些事件之外的任何記錄。

我想給一個唯一的ID,其中Pressure < 110
我已完成的另一數據幀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,但不能找出正確的方法。

或者
如果你能想到的一個簡單的方法讓我的EVENTID指數每一個超過1秒的「缺口」是bewteen連續兩個時間戳檢測時間的增加,讓我知道!

+0

'0'不是'R'中的正確索引。它應該是'1'。 – 2014-09-02 05:11:34

+0

確實!我已經糾正了它,但仍然遇到同樣的問題。 – Ant 2014-09-02 05:22:23

+0

@Ant你可以使用'Map(':',EventBoundaryIndex [,1],EventBoundaryIndex [,2])''。看起來好像在示例中缺少一些 – akrun 2014-09-02 05:24:45

回答

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 
+0

太棒了!比我已經開始的方法更加優雅... – Ant 2014-09-02 05:35:03

+0

@Ant沒問題。你提供了一個選項「Or」是很好的。我沒有完全理解其他邏輯 – akrun 2014-09-02 05:37:49

+0

我幾乎不建議避免使用'T'來表示'TRUE'。 – 2014-09-02 06:02:50