R语言查找Similarity列最大值对应的Feature列值
R语言查找data.frame中指定列最大值对应另一列取值的方法
首先加载示例测试数据:
df <- structure(list(Feature = c("Similarity_CEO", "Similarity_CFO", "Similarity_COO", "Similarity_CPO", "Similarity_CTO", "Similarity_CMO_CGO", "Similarity_CCO_CSO"), Similarity = c(0.647709116583091, 0.57912317932745, 0.610563782018354, 0.568011165196869, 0.532707661875697, 0.595690196204727, 0.575445639485977)), class = "data.frame", row.names = c(NA, -7L))
方法1:基础R原生写法(无任何依赖,兼容性最强)
无需加载第三方包,适配所有版本R,容错性最高:
# 返回Similarity列最大值对应的第一个Feature值 df$Feature[which.max(df$Similarity)]
运行以上代码针对示例数据的返回结果为[1] "Similarity_CEO",和数据中最大值0.6477对应的行完全匹配。
如果需要返回所有并列最大值对应的Feature值,可使用以下写法,注意添加
na.rm = TRUE跳过缺失值避免计算报错:df$Feature[df$Similarity == max(df$Similarity, na.rm = TRUE)]
方法2:dplyr包写法(适配tidyverse管道工作流)
如果日常使用tidyverse生态处理数据,可使用更符合管道逻辑的写法:
library(dplyr) # 返回最大值对应的第一个Feature值 df %>% slice_max(Similarity, n = 1, with_ties = FALSE) %>% pull(Feature)
如果需要保留所有并列最大值,将参数with_ties = FALSE改为with_ties = TRUE即可。
常见方法失效原因排查
如果之前尝试的写法无法正常运行,优先排查以下问题:
- 列名拼写不匹配:检查列名是否存在多余空格、大小写不一致问题,比如列名实际为全小写
similarity时,匹配大写开头的Similarity会返回空值 - 列类型错误:如果
Similarity列是字符型存储的数值,最大值计算会按字符串字典序排序返回错误结果,需先执行df$Similarity <- as.numeric(df$Similarity)转换为数值型再计算 - 异常值干扰:列中如果存在缺失值
NA、无限值Inf,会导致max函数计算报错,计算时添加na.rm = TRUE参数跳过缺失值,提前清洗无限值即可正常运行。
内容的提问来源于stack exchange,提问作者Theresa_S
相关产品推荐
相关产品推荐

