嗨,我有一个如下所示的数据框,我希望能够对数据框进行子集处理,以便仅保留结果数据框中的那些数据框。我想要3条规则
它还需要始终引用数据框中保留的最后一行。
StarT EndT Alarmcode
1 3297.58 3298.62 13902
2 3297.60 3346.20 13907
3 3297.62 3346.17 14111
4 3297.78 3346.13 13909
5 3298.65 3346.08 13908
6 3298.70 3298.75 13902
7 3298.83 3298.88 13902
8 3298.97 3298.98 13902
9 3298.98 3346.03 13900
10 3299.07 3346.00 13902
11 3344.07 3352.75 1001
12 3344.48 3345.90 13906
13 3345.47 3345.87 15111
14 3345.87 3347.78 15111
15 3345.92 3346.58 13906
16 3346.12 3346.17 13902
17 3346.23 3346.50 13908
18 3346.25 3346.30 13902
19 3346.27 3347.75 14111
20 3346.38 3346.43 13902
21 3346.52 3346.53 13902
22 3346.53 3347.70 13900
23 3346.58 3347.67 13908
24 3346.60 3347.63 13906
25 3346.62 3347.60 13902
26 3347.65 3352.30 13906
27 3347.70 3347.72 13902
28 3347.80 3352.25 13908
29 3347.80 3352.27 15111
30 3347.80 3352.28 14111
31 3347.80 3347.85 13902
32 3347.93 3347.98 13902
33 3348.07 3348.12 13902
34 3348.20 3348.22 13902
35 3348.22 3352.23 13900
36 3348.30 3352.00 13902
37 3349.27 3352.22 13907
38 14157.28 14157.28 5122
39 27311.37 27311.38 5122
应保留以下内容:
StarT EndT Alarmcode
1 3297.58 3298.62 13902
38 14157.28 14157.28 5122
39 27311.37 27311.38 5122
答案 0 :(得分:0)
您可以使用^([^~t.]|t($|[^h])|th($|[^u])|thu($|[^m])|thum($|[^b])|thumb($|[^s])|thumbs($|[^.])|thumbs\.($|[^d])|thumbs\.d($|[^b])|\.($|[^p])|\.p($|[^a])|\.pa($|[^r])|\.par($|[^t]))+$
中的lag
和lead
函数来完成上述操作。
我不太了解您的规则...但是我会尽力为您提供一般性的想法,以便您在理解代码时可以适应您的规则。
基本上,使用dplyr
可以引用上一行。然后,您可以根据规则使用lag
或>
创建逻辑语句。
然后,您可以使用<
函数直接删除不符合条件的行。请注意,这将更改行的顺序,因为在继续下一个规则之前将其删除。要解决此问题,您可以使用filter
创建一列来检查规则状态,并且仅在规则逻辑的末尾应用mutate
。
这是它的工作方式:
如果starT在StarT的前几行之后,在EndT的前几行之前,则该行将被删除
filter
如果StarT在上一行starT和EndT之间,但是即使该EndT在上一行EndT之后,它仍会被删除
对不起,我不明白这一点。听起来和第一个一样?
如果starT在上一行StarT和EndT之后,但在上一行EndT的10内,则将其删除。
df <- df %>%
mutate(rule = ifelse(StarT > lag(StarT, 1) & StarT < lag(EndT, 1), 'remove', 'keep'))
然后您可以结束:
df <- df %>%
mutate(rule = ifelse(StarT > lag(EndT, 1) + 10, 'remove', rule))
希望这会有所帮助。 否则,如果您可以阐明第二条规则,很乐意编写完整的代码。