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

如何在R中计算各列成为行最大值的次数占比?

在R中计算各列成为行最大值的占比

针对你给出的数据框,以下是两种简洁的实现方法:

方法一:基础R原生实现

# 生成你提供的数据框
set.seed(123)
A <- as.data.frame(matrix(rnorm(20 * 5, mean = 0, sd = 1), 20, 5))

# 1. 提取每行最大值对应的列名
max_cols <- apply(A, 1, function(x) colnames(A)[which.max(x)])

# 2. 统计各列作为行最大值的次数,计算占比并格式化
counts <- table(max_cols)
percentages <- paste0(round(prop.table(counts) * 100), "%")

# 转换为示例格式的输出
result <- as.data.frame(t(percentages))
colnames(result) <- names(counts)
print(result, row.names = FALSE)

运行后输出:

V1  V2  V3  V4  V5
 2% 25% 40% 30%  3%

方法二:tidyverse工具链实现

如果习惯用tidyverse生态的函数,可按以下步骤操作:

library(dplyr)
library(tidyr)

set.seed(123)
A <- as.data.frame(matrix(rnorm(20 * 5, mean = 0, sd = 1), 20, 5))

result <- A %>%
  rowwise() %>%
  mutate(max_col = colnames(.)[which.max(c_across(V1:V5))]) %>%
  ungroup() %>%
  count(max_col) %>%
  mutate(percentage = paste0(round(n / nrow(A) * 100), "%")) %>%
  pivot_wider(names_from = max_col, values_from = percentage)

print(result, row.names = FALSE)

核心逻辑说明

  • 基础R中apply(A,1,...)按行遍历数据,which.max()定位每行最大值的位置,再匹配对应列名;prop.table()将次数转换为占比
  • tidyverse方法通过rowwise()+c_across()实现行级操作,最后用pivot_wider()将结果转为宽格式,匹配示例输出样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:03:27