如果值低于 -50,则删除顶部和底部的整行
Delete top and bottom entire rows if value is lower than -50
我有以下数据集:
Profit
MRO 15x5
D30
0.00
-9.189
-0.24
.50
-6.076
-0.248
-5.00
-7.699
-0.282
-2.50
-8.008
-0.281
-5.00
-0.183
-0.056
-5.00
-0.235
-0.061
5.00
0.141
-0.027
-5.00
-4.062
-0.103
-2.50
-5.654
-0.258
-2.50
-1.578
-0.051
-5.00
-3.336
-0.205
-2.50
-1.523
-0.022
2.50
-1.524
-0.194
7.50
-1.049
-0.055
0.00
-1.043
-0.059
我想先按升序排列 D30 列,然后查看 Profit 列。如果“利润”列中前 n 行和后 n 行值(单元格范围)小于 -50,则删除数据集中的整行。
结果是这样的:
Profit
MRO 15x5
D30
5.00
0.141
-0.027
-2.50
-1.578
-0.051
7.50
-1.049
-0.055
-5.00
-0.183
-0.056
0.00
-1.043
-0.059
-5.00
-0.235
-0.061
-5.00
-4.062
-0.103
2.50
-1.524
-0.194
-5.00
-3.336
-0.205
0.00
-9.189
-0.24
.50
-6.076
-0.248
此输出是从整个数据集中删除前 1 行和后 3 行的结果,因为这些行(值范围)的利润值小于 -50。
谁能帮我在 R 程序中使用 dplyr 或使用其他一些过滤包来做到这一点?
感谢您的支持。
此致,
法汉
使用cumany
。结合 filter
,它会删除行,直到满足条件(此处为 Profit <= -50
)。
第一个命令是一种将 Profit
列解析为数字列的方法。
library(dplyr)
data %>% mutate(Profit = parse_number(str_replace(Profit,"^-\$(.*)$", "$-\1"))) %>%
arrange(D30) %>%
filter(cumany(Profit > -50)) %>%
arrange(desc(D30)) %>%
filter(cumany(Profit > -50))
Profit MRO_15x5 D30
1 275.0 0.141 -0.027
2 -162.5 -1.578 -0.051
3 337.5 -1.049 -0.055
4 -175.0 -0.183 -0.056
5 100.0 -1.043 -0.059
6 -175.0 -0.235 -0.061
7 -175.0 -4.062 -0.103
8 412.5 -1.524 -0.194
9 -175.0 -3.336 -0.205
10 150.0 -9.189 -0.240
11 12.5 -6.076 -0.248
我有以下数据集:
Profit | MRO 15x5 | D30 |
---|---|---|
0.00 | -9.189 | -0.24 |
.50 | -6.076 | -0.248 |
-5.00 | -7.699 | -0.282 |
-2.50 | -8.008 | -0.281 |
-5.00 | -0.183 | -0.056 |
-5.00 | -0.235 | -0.061 |
5.00 | 0.141 | -0.027 |
-5.00 | -4.062 | -0.103 |
-2.50 | -5.654 | -0.258 |
-2.50 | -1.578 | -0.051 |
-5.00 | -3.336 | -0.205 |
-2.50 | -1.523 | -0.022 |
2.50 | -1.524 | -0.194 |
7.50 | -1.049 | -0.055 |
0.00 | -1.043 | -0.059 |
我想先按升序排列 D30 列,然后查看 Profit 列。如果“利润”列中前 n 行和后 n 行值(单元格范围)小于 -50,则删除数据集中的整行。
结果是这样的:
Profit | MRO 15x5 | D30 |
---|---|---|
5.00 | 0.141 | -0.027 |
-2.50 | -1.578 | -0.051 |
7.50 | -1.049 | -0.055 |
-5.00 | -0.183 | -0.056 |
0.00 | -1.043 | -0.059 |
-5.00 | -0.235 | -0.061 |
-5.00 | -4.062 | -0.103 |
2.50 | -1.524 | -0.194 |
-5.00 | -3.336 | -0.205 |
0.00 | -9.189 | -0.24 |
.50 | -6.076 | -0.248 |
此输出是从整个数据集中删除前 1 行和后 3 行的结果,因为这些行(值范围)的利润值小于 -50。
谁能帮我在 R 程序中使用 dplyr 或使用其他一些过滤包来做到这一点?
感谢您的支持。
此致, 法汉
使用cumany
。结合 filter
,它会删除行,直到满足条件(此处为 Profit <= -50
)。
第一个命令是一种将 Profit
列解析为数字列的方法。
library(dplyr)
data %>% mutate(Profit = parse_number(str_replace(Profit,"^-\$(.*)$", "$-\1"))) %>%
arrange(D30) %>%
filter(cumany(Profit > -50)) %>%
arrange(desc(D30)) %>%
filter(cumany(Profit > -50))
Profit MRO_15x5 D30
1 275.0 0.141 -0.027
2 -162.5 -1.578 -0.051
3 337.5 -1.049 -0.055
4 -175.0 -0.183 -0.056
5 100.0 -1.043 -0.059
6 -175.0 -0.235 -0.061
7 -175.0 -4.062 -0.103
8 412.5 -1.524 -0.194
9 -175.0 -3.336 -0.205
10 150.0 -9.189 -0.240
11 12.5 -6.076 -0.248