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

R语言统计数据框各列取行最大值的观测占比方法

需求说明

R语言数据处理场景中,待处理数据集的每条观测包含volume_1、volume_2、volume_3三个体积数值字段,不同观测下三个字段的数值大小无固定排序规律,需要分别统计三类观测占总观测数的百分比:

  • volume_1为所在行三个体积字段最大值的观测占比
  • volume_2为所在行三个体积字段最大值的观测占比
  • volume_3为所在行三个体积字段最大值的观测占比

示例测试数据如下:

df <- structure(list(PVC = c("29A", "2D5", "2HX", "38A", "3CN", "6021051"
), Age = c(6, 5, 6, 10, 5, 7), volume_1 = c(59.44244884, 51.69518257, 
63.17950819, 56.4269955, 64.05189184, 61.82983473), volume_2 = c(54.74897726, 
56.64778447, 51.86880673, 59.71146472, 58.96633234, 63.39471043
), volume_3 = c(58.97596791, 51.75711362, 61.36142512, 57.09629745, 
64.25164825, 63.19407463), Year = c("2003", "2002", "2003", "2008", 
"2003", "1994"), averageAB = c(57.09571305, 54.17148352, 57.52415746, 
58.06923011, 61.50911209, 62.61227258), diff_AB_C = c(-1.88025486, 
2.4143699, -3.83726766, 0.972932659999998, -2.74253616, -0.58180205
), sumAB = c(114.1914261, 108.34296704, 115.04831492, 116.13846022, 
123.01822418, 125.22454516), ratioAB_C = c(1.93623657477333, 
2.09329615703558, 1.87492899154491, 2.03408041163622, 1.91463141461122, 
1.98158681637776)), row.names = c(NA, 6L), class = "data.frame")
实现思路
  • 先筛选出三个体积字段的列子集,逐行定位最大值对应的字段
  • 统计三个字段作为行最大值的出现频次
  • 用频次除以总观测数,乘以100得到百分比结果
  • 注意:若存在多个字段数值相等且同为行最大值的场景,可根据业务规则调整计数逻辑,以下代码默认取第一个出现的最大值对应字段
实现代码

基础R实现(无需安装加载第三方包)

直接用内置函数max.col完成逐行最大值定位,计算效率高,适合大数据量场景:

# 指定要计算的三个体积列名
vol_cols <- c("volume_1", "volume_2", "volume_3")
# 逐行获取最大值对应的列索引
max_col_pos <- max.col(df[vol_cols])
# 转换为对应的列名
max_col_name <- vol_cols[max_col_pos]
# 计算各字段作为最大值的占比(百分比)
perc_result <- table(max_col_name) / nrow(df) * 100

# 打印结果
print(perc_result)

示例数据运行输出:

max_col_name
volume_1 volume_2 volume_3 
33.33333 50.00000 16.66667 

dplyr实现(适配管道操作工作流)

如果日常数据处理用tidyverse系列包,可以用逐行计算的方式实现,逻辑更直观:

library(dplyr)

perc_result <- df %>%
  rowwise() %>%
  # 逐行判断最大值对应的字段名
  mutate(max_vol = vol_cols[which.max(c(volume_1, volume_2, volume_3))]) %>%
  ungroup() %>%
  # 统计频次并计算百分比
  count(max_vol, name = "count") %>%
  mutate(percentage = count / sum(count) * 100)

print(perc_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:51:09