如何用R的dplyr包删除D30排序后首尾利润低于-50的行
实现方法(基于dplyr包)
你可以直接复用以下代码,按需调整参数即可实现需求。
完整实现代码
# 加载dplyr包 library(dplyr) # 自定义参数(可根据实际需求调整) n_top <- 1 # 要检查的排序后顶部行数,示例场景设为1 n_bottom <- 3 # 要检查的排序后底部行数,示例场景设为3 profit_threshold <- -50 # Profit列过滤阈值 # 执行数据处理 df_result <- df %>% # 替换df为你自己的数据集变量名 arrange(D30) %>% # 按D30列升序排序 mutate(total_rows = n()) %>% # 新增辅助列记录排序后总行数 filter( # 排除顶部n行中Profit小于阈值的行 !(row_number() <= n_top & Profit < profit_threshold), # 排除底部n行中Profit小于阈值的行 !(row_number() > (total_rows - n_bottom) & Profit < profit_threshold) ) %>% select(-total_rows) # 删除辅助计算列
参数说明
n_top:需要检查的排序后头部行数,仅在这个范围内判断Profit是否满足删除条件n_bottom:需要检查的排序后尾部行数,仅在这个范围内判断Profit是否满足删除条件profit_threshold:Profit列的删除阈值,需求中对应为-50
注意事项
- 如果列名包含空格、特殊字符(比如
MRO 15x5),在dplyr操作时需要用反引号包裹列名,例如`MRO 15x5` - 如果你需要删除所有头部/尾部满足条件的行,而非限定在固定n行范围内,可去掉
row_number()的行数限制,调整过滤逻辑即可
内容的提问来源于stack exchange,提问作者Farhan
相关产品推荐
相关产品推荐

