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

在dplyr中使用mutate(across)计算多列百分比遇异常求助

问题解决:使用mutate(across)计算列百分比时得到100%的原因及修复

错误原因

你的数据在创建后处于group_by(fruit)的分组状态,当用across调用sum(.x)时,这个求和是针对每个fruit分组内的当前列计算的。但每个分组里John、Jacob、Total各自只有1个值,所以sum(.x)就等于当前值本身,最终计算结果自然是100%。

解决方案

要计算整列的百分比,需要先取消数据的分组状态,再执行across的计算逻辑。

修复后的代码

# 先取消分组,再计算各列占列总和的百分比(保留两位小数)
fruiteaten <- test %>%
  ungroup() %>%
  mutate(across(c(John, Jacob, Total), ~ round((.x / sum(.x)) * 100, 2)))

# 输出结果
# A tibble: 3 × 4
  fruit    John Jacob Total
  <chr>   <dbl> <dbl> <dbl>
1 Apples    2.08  31.2   9.09
2 Pears    27.1   56.2  33.3
3 Bananas  70.8   12.5  57.6

如果需要保留分组(比如后续还有其他分组操作),也可以明确指定使用全局的列总和进行计算:

fruiteaten <- test %>%
  mutate(across(c(John, Jacob, Total), ~ round((.x / sum(.data[[cur_column()]], na.rm = TRUE)) * 100, 2)))

注:你的期望输出数值看起来是未乘以100的比例值,如果不需要转换为百分比,去掉*100即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:27:21