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

如何在R语言中按分组提取每组最大值对应的数据?

解决按分组提取最大值对应行的问题

嘿,我懂你的困扰啦——你当前用subset(df, value == max(value))只会返回全局最大值对应的行,因为max(value)是针对整个value列计算的,自然只挑出了value=5的那一行。要实现按分组提取每组最大值对应的行,这里有几种实用的R语言解决方案:

方法1:使用Base R的ave()函数(无需额外安装包)

ave()函数可以帮我们按分组计算每个组的最大值,然后匹配筛选对应的行:

# 按group分组计算每个组的最大值,筛选匹配行
result_base <- df[df$value == ave(df$value, df$group, FUN = max), ]
# 重置行名让结果更整洁(可选操作)
rownames(result_base) <- NULL
print(result_base)

这段代码里,ave(df$value, df$group, FUN = max)会为每一行生成其所属分组的最大值,接着我们筛选出value等于该分组最大值的行,就能得到每个组的目标数据啦。

方法2:使用dplyr包(tidy风格,可读性高)

如果你习惯用tidyverse系列工具,dplyr的分组操作会非常直观:

# 先安装并加载dplyr(如果还没装的话)
# install.packages("dplyr")
library(dplyr)

result_dplyr <- df %>%
  group_by(group) %>%  # 按group分组
  filter(value == max(value)) %>%  # 筛选每组中value等于最大值的行
  ungroup()  # 取消分组(可选,让结果回到普通数据框)

print(result_dplyr)

方法3:使用data.table包(大数据场景更高效)

如果你的数据集很大,data.table的速度优势会很明显:

# 先安装并加载data.table(如果还没装的话)
# install.packages("data.table")
library(data.table)

# 转换为data.table格式
dt <- as.data.table(df)
# 按group分组,筛选每组最大值对应的行
result_dt <- dt[, .SD[value == max(value)], by = group]

print(result_dt)

以上三种方法都能得到你预期的结果:

value group
1     0     1
2     2     2
3     3     3
4     5     4
5     0     5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:21:39