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

如何在R语言中判断数据框行最大值是否存在列间并列?

解决方法:给数据框添加最大值并列标记列

我来帮你搞定这个需求!其实只需要在你现有代码的基础上,额外加一步判断每行最大值的出现次数就可以了。下面提供两种实现方式,你可以根据自己的习惯选择:

方法一:Base R 实现

先重现你的数据框,再分步计算所需列:

# 构造原始数据框
df <- data.frame(v1 = c(0,2,5,6,9,8,7,4,5,6,3,5,4), 
                 v2 = c(6,3,5,4,9,5,7,4,8,5,2,3,6), 
                 v3 = c(9,6,3,5,4,2,8,7,4,1,2,5,4), 
                 v4 = c(6,3,5,2,1,4,1,2,5,3,2,1,2), 
                 v5 = c(6,3,2,5,4,1,2,5,3,2,5,6,5))

# 计算每行的最大值
row_max <- apply(df, 1, max)
# 统计每行中最大值出现的次数
tie_count <- apply(df, 1, function(x) sum(x == max(x)))
# 生成你需要的top列(保留你原来的逻辑)
df$top <- colnames(df)[apply(df, 1, which.max)]
# 生成tie列:次数大于1则标记为TRUE,否则为FALSE
df$tie <- tie_count > 1

执行后查看结果,会和你期望的输出完全一致:比如第3行(v1、v2、v4都是5)的tie为TRUE,第5行(v1和v2都是9)的tie也为TRUE,其余无并列的行tie为FALSE。

方法二:Tidyverse(dplyr)实现

如果你习惯用tidyverse风格的代码,可以用rowwise()按行处理:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(
    # 计算当前行的最大值
    row_max = max(c_across(v1:v5)),
    # 判断最大值是否出现多次
    tie = sum(c_across(v1:v5) == row_max) > 1,
    # 获取第一个最大值所在的列名
    top = colnames(df)[which.max(c_across(v1:v5))]
  ) %>%
  ungroup()

这个方法逻辑更直观,用c_across()选中所有数值列,按行完成所有计算,最后取消行分组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:15:08