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

如何在R中基于现有DataFrame创建指定列的百分比表格?

计算DataFrame中列的相对百分比(基于指定列)

我懂你想要把1到4列的数值转换成对应行All列的百分比,用prop.table没得到预期结果的困扰——确实,prop.table默认是按行/列的总和来计算比例,和咱们这次的需求不匹配,咱们换个直接的方法来实现。

方法一:基础R实现

先复制原数据框避免修改原始数据,然后对目标列做逐行的除法运算:

# 复制原数据
dd_percent <- dd

# 计算第3到第6列(对应列名1、2、3、4)相对于All列的百分比,保留1位小数
dd_percent[, 3:6] <- round(dd[, 3:6] / dd[, "All"] * 100, 1)

# 查看结果
print(dd_percent)

运行后会得到和你期望一致的输出:

Sample All    1    2    3    4
1     E1 250  11.6 10.8  4.4  7.2
2     E2 210  17.1 11.4 13.3 10.0
3     E3 130  22.3  7.7  9.2 17.7
4     E4 140  23.6 17.1 15.7 10.0
5     E5 220  12.3  7.3  8.6  8.2

如果需要保留更多小数位(比如你示例里E3的4列是17.69),只需要把round的第二个参数改成2就行:round(..., 2)。

方法二:tidyverse(dplyr)实现

如果你习惯用tidyverse语法,用mutate+across可以更简洁地完成:

library(dplyr)

dd_percent <- dd %>%
  mutate(across(`1`:`4`, ~ round(.x / All * 100, 1)))

这里across(1:4, ...)会对1到4的每一列执行后面的计算逻辑:用当前列的值除以同一行的All值,乘以100后保留1位小数。

为什么prop.table不适用?

prop.table(dd[,3:6], 1)会计算每行的数值占该行所有目标列总和的比例,但咱们的需求是占All列的比例,而不是行内目标列的总和,所以prop.table不符合这次的计算逻辑。

内容的提问来源于stack exchange,提问作者N.100

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:57:12