You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中按col_x分组去重后取col_z最高的5条记录?

问题描述

现有一个名为sorted_df的R数据框,包含col_x、col_y、col_z三列共1200行,已按col_z降序排序。其中:

  • col_x有6个唯一字符串(如A、B、C等)
  • col_y有800个唯一字符串
  • col_z为1200个唯一浮点数

需求是按col_x分组,选择每组中col_z值最高的5行,且每组内的col_y必须是唯一字符串。但当前代码运行后,同一col_x分组下会出现多条col_y相同的记录(仅col_z值不同),不符合需求。

解决方案

核心思路是先去除col_x+col_y的重复组合(保留每个组合中col_z最大的条目),再按col_x分组取前5个最高col_z的记录。使用dplyr包的代码如下:

# 先去重:每个col_x+col_y组合只保留col_z最大的行,再按col_x分组取前5
top_5_unique <- sorted_df %>%
  # 按col_x和col_y组合分组,保留每组col_z最大的1行
  group_by(col_x, col_y) %>%
  slice_max(col_z, n = 1) %>%
  # 回到按col_x分组
  group_by(col_x) %>%
  # 分组内按col_z降序排序
  arrange(desc(col_z), .by_group = TRUE) %>%
  # 取每组前5行
  slice(1:5)

代码说明

  • group_by(col_x, col_y):将数据按col_x(目标分组)和col_y(需要去重的列)的组合进行分组
  • slice_max(col_z, n = 1):在每个组合分组中,仅保留col_z值最大的那一行,彻底消除col_x+col_y的重复情况
  • group_by(col_x):重新切换到按col_x的单独分组
  • arrange(desc(col_z), .by_group = TRUE):确保在每个col_x分组内部,数据按col_z从高到低排序
  • slice(1:5):提取每个col_x分组的前5行,即为每组满足col_y唯一且col_z最高的5条记录

内容的提问来源于stack exchange,提问作者Steven Hill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 07:27:28