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

在R中使用dplyr分组求最大值时,如何获取对应列的正确取值?

问题原因

你原来的代码里,which.max(Column_B)返回的是分组内的行位置索引(比如每组里最大值在第1行还是第2行),但直接把这个索引值赋值给Corresponding_C,自然得到的是1、2这类数字,而不是对应的Column_C内容。

修正方法

这里提供几种实用的修正方式:

方法1:用slice_max(最直观)

dplyr的slice_max专门用来提取每组中指定列最大的N行,直接就能拿到对应行的所有信息:

library(dplyr)

df_new <- df %>%
  group_by(Column_A) %>%
  # 取每组Column_B最大的1行,若有多个最大值可去掉with_ties=FALSE保留所有
  slice_max(Column_B, n = 1, with_ties = FALSE) %>%
  # 重命名列到你需要的名称
  rename(Max_B = Column_B, Corresponding_C = Column_C) %>%
  # 选择需要的列
  select(Column_A, Max_B, Corresponding_C)

方法2:在summarise中通过索引取值

直接在summarise里用which.max得到的索引,去提取对应位置的Column_C值:

df_new <- df %>%
  group_by(Column_A) %>%
  summarise(
    Max_B = max(Column_B),
    # 用索引取出对应行的Column_C
    Corresponding_C = Column_C[which.max(Column_B)]
  )

方法3:用filter筛选最大值行

如果需要保留所有Column_B等于最大值的行(比如同一组有多个相同最大值时),可以用filter:

df_new <- df %>%
  group_by(Column_A) %>%
  filter(Column_B == max(Column_B)) %>%
  rename(Max_B = Column_B, Corresponding_C = Column_C) %>%
  select(Column_A, Max_B, Corresponding_C)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:45:02