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)
这是使用该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)
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |