如何提取开始信号和结束信号之间的所有行?

amy*_*tun 4 filtering r dataframe

我有以下内容df,我想根据以下开始和结束信号提取所有行.

启动信号:当状态从1变为0时结束信号:当状态从0变为-1时.

df <- data.frame(time = rep(1:14), status = c(0,1,1,0,0,0,-1,0,1,0,0,0,-1,0))

   time status
1     1      0
2     2      1
3     3      1
4     4      0
5     5      0
6     6      0
7     7     -1
8     8      0
9     9      1
10   10      0
11   11      0
12   12      0
13   13     -1
14   14      0
Run Code Online (Sandbox Code Playgroud)

欲望:

   time status    
4     4      0
5     5      0
6     6      0
10   10      0
11   11      0
12   12      0
Run Code Online (Sandbox Code Playgroud)

Dav*_*urg 6

这是使用该data.table软件包的可能解决方案.我基本上首先通过status == 1外观进行分组然后检查每组是否还有一个status == -1,如果有的话,我将该组从第二个事件中分组,直到-1事件减1

library(data.table)
setDT(df)[, indx := cumsum(status == 1)]
df[, if(any(status == -1)) .SD[2:(which(status == -1) - 1)], by = indx]
#    indx time status
# 1:    2    4      0
# 2:    2    5      0
# 3:    2    6      0
# 4:    3   10      0
# 5:    3   11      0
# 6:    3   12      0 
Run Code Online (Sandbox Code Playgroud)