expss 表中出现重叠小计的重复行

Duplicate rows occuring with overlapping subtotals in expss tables

继今天早些时候遇到的情况之后,又出现了一个与 expss 相关的新问题。 在交叉表创建序列中使用重叠小计会导致重复行,更准确地说,至少在两个不同小计中使用的行。

让我们考虑 infert 数据集来突出这个问题。为了演示,我们将 parity 强制转换为因子。

library(datasets)
infert$parity <- factor(infert$parity)

infert %>%
  tab_cells(parity) %>%
  tab_subtotal_cells("1+2+3"=levels(parity)[1:3], "1+2"=levels(parity)[1:2],
                     position = "above") %>%
  tab_cols(total()) %>%
  tab_stat_cases(label="N", total_row_position="none") %>%
  tab_pivot(stat_position="inside_columns")

结果不言自明。尽管我明白为什么会发生这种情况(需要计算每个不同的总数),但我想知道是否有一种聪明的方法来摆脱重复项。

作为一个附属问题,由于小计可以 written/positionned 以多种不同的方式出现,因此输出顺序可能会非常混乱。是否有排序 and/or 仅移动指定行的函数? (实际上这与 tab_sort 函数中的 excluded_rows 参数相反) 理想情况下,输出将按如下方式排序:

1+2+3
1+2
1
2
3
4
5+6
5
6

谢谢!

如果您的小计有重叠的项目,您可以使用令人惊讶的命名函数 'hide' 隐藏这些项目。到目前为止,还没有自定义定位小计的功能。然而,我们可以通过一个小技巧得到你想要的输出:

data("infert")
infert$parity = factor(infert$parity)

infert %>%
    tab_cells(
            subtotal(parity, 
                     "1+2+3"=hide(levels(parity)[1:3]), 
                     "1+2"= levels(parity)[1:2],
                     "3" = hide(levels(parity)[3]), # to show 3, because "1+2+3" subtotal hide its items
                     "5+6"=levels(parity)[5:6], 
                     position = "above"
                     )
    ) %>%
    tab_cols(total()) %>%
    tab_stat_cases(label="N", total_row_position="none") %>%
    tab_pivot(stat_position="inside_columns")