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

R语言基于各列最大值计算多列值占比的代码问题排查

现有代码的问题

你当前的循环逻辑是按行取最大值,max(df[i, 1:4]) 取的是第i行所有列的最大值,计算规则为「每行内各值除以该行最大值」,和你需要的「按列取最大值、计算列内各值占该列最大值的百分比」需求完全相反,这就是结果不符合预期的核心原因。

正确实现方案

方案1:修改原有循环逻辑

调整循环遍历顺序,先遍历列取每列最大值,再遍历行计算该列内所有值的占比:

output <- df
# 外层遍历列,先取当前列的最大值
for (j in 1:ncol(df)) {
  col_max <- max(df[, j])
  # 内层遍历行,计算当前列每个值的占比,保留两位小数
  for (i in 1:nrow(df)) {
    output[i, j] <- round(df[i, j] * 100 / col_max, 2)
  }
}
output

方案2:更高效的向量化写法(R更推荐,无需手写循环)

基础R实现:

# 按列计算百分比,保留两位小数
output <- round(apply(df, 2, function(x) x / max(x) * 100), 2)
# apply默认返回矩阵,可转成数据框格式
output <- as.data.frame(output)

dplyr实现:

library(dplyr)
output <- df %>%
  mutate(across(everything(), ~round(.x / max(.x) * 100, 2)))

以上两种方案输出结果均和你给出的期望结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:01