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

使用janitor::adorn_percentages()时如何排除总计行列的百分比

用janitor包无需stringr实现交叉表Total行/列移除百分比

在处理mtcars数据集生成交叉汇总表时,我们可以不依赖stringr包的字符串替换,仅通过janitor包结合dplyr的基础函数,实现Total行和Total列只保留纯数值、其余单元格保留「数值 (百分比)」格式的效果:

library(janitor)
library(dplyr)

# 生成目标格式的交叉表
final_table <- mtcars %>%
  # 生成基础交叉频数表
  tabyl(am, cyl) %>%
  # 添加Total行(各列总和)和Total列(各行总数)
  adorn_totals(c("row", "col")) %>%
  # 对非Total行的各列,拼接数值与百分比;Total行直接保留数值
  mutate(
    across(-c(am, Total),
           ~if_else(am != "Total",
                    paste0(., " (", adorn_pct_formatting(./Total, digits = 2), ")"),
                    as.character(.))),
    # Total列仅保留纯数值
    Total = as.character(Total)
  )

final_table

运行后输出结果:

am           4          6           8 Total
      0  3 (15.79%) 4 (21.05%) 12 (63.16%)    19
      1  8 (61.54%) 3 (23.08%)  2 (15.38%)    13
  Total          11          7          14    32

实现逻辑说明

  • 先用tabyl()生成基础频数表,再通过adorn_totals()添加Total行和列的纯数值;
  • 用mutate()结合across()遍历非Total、非am的列:
    • 对非Total行的单元格,用adorn_pct_formatting()计算并格式化行百分比,再与原数值拼接成「数值 (百分比)」格式;
    • Total行的单元格直接保留原数值并转为字符型;
  • 单独将Total列转为纯数值字符型,完成格式调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:37:33