RStudio中分组筛选最大值并列时优先选WPcondition为P的行的实现方法
实现方案(R tidyverse 版本)
你可以直接用dplyr的分组排序逻辑实现需求,排序规则完全匹配你给出的优先级:
第一步:加载依赖包
如果未安装tidyverse先运行安装命令,否则直接加载:
# 未安装的话先执行:install.packages("tidyverse") library(tidyverse)
第二步:执行数据处理
假设你的数据集名为df,直接运行以下代码即可:
result <- df %>% # 先把realValue转成数值型,避免字符排序出错 mutate(realValue = as.numeric(realValue), # 记录原始行号,同优先级时保留原始排序 orig_row = row_number()) %>% # 按Condition、TargetWord分组 group_by(Condition, TargetWord) %>% # 按规则排序:realValue降序 > P优先 > 原始顺序靠前优先 arrange(desc(realValue), desc(WPcondition == "P"), orig_row) %>% # 取每组第一条符合规则的记录 slice(1) %>% # 清理辅助列,恢复输出格式 ungroup() %>% select(-orig_row) %>% arrange(Condition, TargetWord)
逻辑说明
代码的排序逻辑完全对齐你给出的规则:
- 第一优先级:
desc(realValue)保证realValue最高的行排在最前 - 第二优先级:
desc(WPcondition == "P")同realValue的情况下,P的行会排在Q前面 - 第三优先级:
orig_row前两个条件都相同时,保留原始数据中出现更早的行
运行后输出的result就是你需要的结果。
内容的提问来源于stack exchange,提问作者Ajrhjnd
相关产品推荐
相关产品推荐

