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

如何根据矩阵第二列最大值获取第一列对应值(R语言场景)

解决方法:获取频数最高的firstPlace值向量

我来帮你搞定这个问题!首先得明确你的mat1结构:通过table()转成数据框后,它包含两列——firstPlace(对应选手名称,是因子类型)和Freq(对应频数,注意这里列名是大写的Freq,不是你提到的freq)。你之前的代码会返回所有等于最大值的单元格,而不是只提取firstPlace列的对应值,咱们调整下写法就能解决。

基础R写法

# 先找到Freq列的最大值
max_freq <- max(mat1$Freq)
# 筛选出Freq等于最大值的firstPlace值,转成字符向量
top_players <- as.character(mat1$firstPlace[mat1$Freq == max_freq])

用dplyr的简洁写法(符合你之前用管道的习惯)

既然你已经用到了dplyr的管道运算符%>%,可以用更简洁的方式实现:

library(dplyr)

top_players <- mat1 %>%
  filter(Freq == max(Freq)) %>%  # 筛选频数等于最大值的行
  pull(firstPlace) %>%           # 提取firstPlace列
  as.character()                 # 转成字符向量(如果不需要因子格式的话)

这样得到的top_players就是你想要的结果,比如如果CR和MS的频数同时为最大值,就会返回c("CR", "MS")这样的字符向量。

为什么你之前的代码不对?

你用的mat1[which(mat1 == max(mat1[,2]), arr.ind = TRUE)]会返回所有等于最大值的单元格位置,包括Freq列本身的最大值单元格,所以结果里会混进频数数值。而咱们的写法是直接针对firstPlace列,只筛选对应频数等于最大值的行,自然就能得到准确的选手名称向量啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:55:08