这次有一个特殊要求,因为知道如何获得我想要的表输出,但想知道 expss 是否存在不那么冗长的解决方案。首先,这个主题可以被认为是这个讨论的扩展 -->带有 expss 包的复杂表,并且也与另一个有关 -->如何在 expss 表中显示仅选择子组 + 整个数据框的结果?
我的表结构如下:首先显示总数据框行的结果,然后按子组拆分。截至今天,以下是我的处理方式(以infert
数据集为例):
1) 表格模板
### Banner set up
my_banner = infert %>%
tab_cols(total())
my_custom_table = . %>%
tab_significance_options(sig_level=0.2, keep="none", sig_labels=NULL, subtable_marks="greater", mode="append") %>%
tab_stat_cases(label="N", total_row_position="above", total_statistic="u_cases", total_label="TOTAL") %>%
tab_stat_cpct(label="%Col.", total_row_position="above", total_statistic="u_cpct", total_label="TOTAL") %>%
# Parity x Education
tab_cols(education) %>%
tab_stat_cases(label="N", total_row_position="above", total_statistic="u_cases", total_label="TOTAL") %>%
tab_last_add_sig_labels() %>%
tab_stat_cpct(label="%Col.", total_row_position="above", total_statistic="u_cpct", total_label="TOTAL") %>%
tab_last_add_sig_labels() %>%
tab_last_sig_cpct(label="T.1", compare_type="subtable")
2) 创建 3 个不同的表(总计 1 个,每个子组 1 个),合并为一个:
tab1 <- my_banner %>%
tab_cells(parity) %>%
my_custom_table() %>%
tab_pivot(stat_position="inside_columns")
tab2 <- infert %>%
apply_labels(education="education (CASE 0)") %>%
tab_cells(parity) %>%
tab_cols(total(label = "CASE 0")) %>%
tab_subgroup(case==0) %>%
my_custom_table() %>%
tab_pivot(stat_position="inside_columns")
tab3 <- infert %>%
apply_labels(education="education (CASE 1)") %>%
tab_cells(parity) %>%
tab_cols(total(label = "CASE 1")) %>%
tab_subgroup(case==1) %>%
my_custom_table() %>%
tab_pivot(stat_position="inside_columns")
final_tab <- tab1 %merge% tab2 %merge% tab3
所有这段代码仅适用于 1 个表,您了解我的担心。有什么好的实践技巧可以避免这个冗长(但有效)的序列吗?我的第一个猜测是:
my_banner %>%
tab_cells(parity) %>%
my_custom_table() %>%
tab_subgroup(case==0) %>%
my_custom_table() %>%
tab_subgroup(case==1) %>%
my_custom_table() %>%
tab_pivot(stat_position="inside_columns")
计算了一个表,但输出远不及目标,可能有一个修复,但我不知道在哪里寻找。任何帮助将不胜感激,谢谢!(注意:如果一个简单的解决方案涉及摆脱#TOTAL 列,我也可以)