如何在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
相关产品推荐
相关产品推荐

