在 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 |
你可以试试这个:
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