我有一个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索引就会增加,请告诉我!
答案 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