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

R语言ftable操作:如何在频数表数值旁添加对应列百分比

实现ftable多维频数表添加列百分比的方法

核心思路:ftable本质是结构化的列联表,我们可以先将其转为普通矩阵计算列百分比,再将频数与百分比拼接后还原为ftable格式即可,全程可以用R基础包实现,无需额外依赖。

完整实现代码如下:

# 原有示例代码
year <- c(2000,2000,2000,2001,2001,2001,2002,2002,2002)
county <- c("A","B","C","A","B","C","A","B","C")
score <- c("High","High","Low","Low","Low","High","High","High","Low")
df <- data.frame(year,county,score)
tb <- ftable(year ~ county + score, data=df)

# 新增列百分比处理代码
# 1. 将ftable转为矩阵方便计算
tb_mat <- as.matrix(tb)
# 2. 计算列百分比,margin=2表示按列求和,结果保留1位小数
tb_pct <- round(prop.table(tb_mat, margin = 2) * 100, 1)
# 3. 拼接频数和百分比
tb_comb <- matrix(
  paste0(tb_mat, "(", tb_pct, "%)"),
  nrow = nrow(tb_mat),
  dimnames = dimnames(tb_mat)
)
# 4. 还原为ftable格式,保持原有行变量层级
tb_final <- as.ftable(tb_comb, row.vars = c("county", "score"))

# 查看最终结果
print(tb_final)

输出效果如下:

year 2000     2001     2002    
county score                    
A      High          1(33.3%) 0(0.0%)  1(33.3%)
       Low           0(0.0%)  1(33.3%) 0(0.0%)
B      High          1(33.3%) 0(0.0%)  1(33.3%)
       Low           0(0.0%)  1(33.3%) 0(0.0%)
C      High          0(0.0%)  1(33.3%) 0(0.0%)
       Low           1(33.3%) 0(0.0%)  1(33.3%)

补充说明:如果需要调整百分比的小数位数,修改round函数的第二个参数即可;如果需要计算行百分比,把prop.table的margin参数改为1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 18:57:02