如何根据矩阵第二列最大值获取第一列对应值(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
相关产品推荐
相关产品推荐

