【问题标题】:Delete top and bottom entire rows if value is lower than -50如果值低于 -50,则删除顶部和底部整行
【发布时间】:2022-01-11 09:58:50
【问题描述】:

我有以下数据集:

Profit MRO 15x5 D30
$150.00 -9.189 -0.24
$12.50 -6.076 -0.248
-$125.00 -7.699 -0.282
-$162.50 -8.008 -0.281
-$175.00 -0.183 -0.056
-$175.00 -0.235 -0.061
$275.00 0.141 -0.027
-$175.00 -4.062 -0.103
-$162.50 -5.654 -0.258
-$162.50 -1.578 -0.051
-$175.00 -3.336 -0.205
-$162.50 -1.523 -0.022
$412.50 -1.524 -0.194
$337.50 -1.049 -0.055
$100.00 -1.043 -0.059

我想先按升序排列 D30 列,然后查看利润列。如果利润列中前 n 行和后 n 行的值(单元格区域)小于 -50,则删除数据集中的整行。

结果会是这样的:

Profit MRO 15x5 D30
$275.00 0.141 -0.027
-$162.50 -1.578 -0.051
$337.50 -1.049 -0.055
-$175.00 -0.183 -0.056
$100.00 -1.043 -0.059
-$175.00 -0.235 -0.061
-$175.00 -4.062 -0.103
$412.50 -1.524 -0.194
-$175.00 -3.336 -0.205
$150.00 -9.189 -0.24
$12.50 -6.076 -0.248

此输出是从整个数据集中删除前 1 行和后 3 行的结果,因为这些行(值范围)的利润值小于 -50。

谁能帮我在 R 程序中使用 dplyr 或使用其他一些过滤包来做到这一点?

感谢您的支持。

问候, 法尔汉

【问题讨论】:

  • 澄清一下,“上升”听起来你的意思是“越来越消极”?并且您想删除所有连续的第一行和最后一行的利润
  • 亲爱的乔恩,感谢您的快速回复。是的,它可能会导致利润列中出现更多负值。然后应该删除利润中小于 -50 的所有负连续值的顶部和底部,并且该删除应该是整行。如果顶部或底部的第一个值为正,则顶部或底部的单元格范围之和小于 -50,则应删除整个子集。
  • "如果顶部或底部的第一个值为正,则从顶部或底部开始的单元格范围的总和小于 -50,则应删除整个子集。" -- 所以如果顶部和底部都 > -50,删除所有行
  • 如果顶部和底部都 >-50 则查看顶部和底部范围内的总和,如果范围内的总和

标签: r dplyr filtering


【解决方案1】:

使用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

【讨论】:

  • 非常感谢。这将节省我大量过滤数据的时间。非常感谢您的回复。
  • 是的,结果完全符合要求。感谢您的支持。
  • 完成:)。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 2017-12-08
  • 2018-04-01
  • 1970-01-01
相关资源
最近更新 更多