R 一旦达到触发器/阈值就提取连续行

问题描述 投票:0回答:1

在 R 中,我有这个数据框:

身份证 价值 概率
1 112 0.48
2 113 0.49
3 114 0.50
4 115 0.51
5 116 0.52
6 117 0.53
7 118 0.54
8 119 0.55
9 120 0.56
10 121 0.57
11 122 0.58
12 123 0.56
13 124 0.55
14 125 0.54
15 126 0.53
16 125 0.52
17 124 0.51
18 123 0.50
19 122 0.49
20 121 0.48
21 120 0.47
22 121 0.48
23 122 0.52
24 123 0.55
25 123 0.53
26 122 0.52
27 121 0.51
28 120 0.50
29 119 0.49

我需要提取行,一旦概率字段中达到 0.55 的阈值,所有概率高于 0.5 的后续行都会被提取。 此过程将重复数据帧,同时为每个组添加分组标识符。 我的最终输出是:

身份证 价值 概率 团体
8 119 0.55 1
9 120 0.56 1
10 121 0.57 1
11 122 0.58 1
12 123 0.56 1
13 124 0.55 1
14 125 0.54 1
15 126 0.53 1
16 125 0.52 1
17 124 0.51 1
18 123 0.50 1
24 123 0.55 2
25 123 0.53 2
26 122 0.52 2
27 121 0.51 2
28 120 0.50 2
r
1个回答
0
投票

你可以试试这个:

library(dplyr)

df %>%
  mutate(group = consecutive_id(Probability >= 0.55)) %>%
  filter(group > 1 & Probability >= 0.5) %>%
  mutate(group = cumsum(c(TRUE, diff(ID) > 1)))

#   ID Value Probability group
#1   8   119        0.55     1
#2   9   120        0.56     1
#3  10   121        0.57     1
#4  11   122        0.58     1
#5  12   123        0.56     1
#6  13   124        0.55     1
#7  14   125        0.54     1
#8  15   126        0.53     1
#9  16   125        0.52     1
#10 17   124        0.51     1
#11 18   123        0.50     1
#12 23   122        0.52     2
#13 24   123        0.55     2
#14 25   123        0.53     2
#15 26   122        0.52     2
#16 27   121        0.51     2
#17 28   120        0.50     2
© www.soinside.com 2019 - 2024. All rights reserved.