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

如何在R语言Crosstable包中控制percent_pattern移除总计列百分比?

解决Crosstable包总计列仅显示数值的问题

问题描述

在RStudio中使用Crosstable包生成交叉表时,希望总计列只显示数值,不附带百分比。使用percent_pattern = "{n}"可以控制表格主体区域仅显示数值,但无法移除总计列中的百分比。尝试通过列表形式指定total_all = "{n}",但总计列的百分比仍然存在。

原测试代码:

library(crosstable)
crosstable(mtcars2, am, by=vs, total="both", percent_pattern = "{n}") %>%
  as_flextable(keep_id=TRUE)

尝试过的无效代码:

crosstable(mtcars2, am, by=vs, total="both", percent_pattern = list(total_all = "{n}")) %>%
  as_flextable(keep_id=TRUE)

解决方案

需要明确指定所有涉及的区域的显示规则,因为当使用列表形式的percent_pattern时,未指定的区域会使用默认格式(默认包含百分比)。

完整覆盖所有区域的代码

如果希望表格主体、行总计、列总计、全局总计都只显示数值,可以使用以下代码:

library(crosstable)
crosstable(mtcars2, am, by=vs, total="both", 
           percent_pattern = list(
             body = "{n}",
             total_row = "{n}",
             total_col = "{n}",
             total_all = "{n}"
           )) %>%
  as_flextable(keep_id=TRUE)

仅针对总计列的简化代码

如果仅需要移除列总计和全局总计的百分比,同时保持主体区域的设置,可以只指定body、total_col和total_all:

library(crosstable)
crosstable(mtcars2, am, by=vs, total="both", 
           percent_pattern = list(
             body = "{n}",
             total_col = "{n}",
             total_all = "{n}"
           )) %>%
  as_flextable(keep_id=TRUE)

原理说明

Crosstable的percent_pattern参数在使用列表配置时,未明确指定的区域会沿用默认格式(通常为"{n} ({p}%)",即数值+百分比)。因此仅设置total_all无法覆盖列总计(total_col)的默认格式,需要同时指定所有需要修改的区域才能达到预期效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:24:57