0

在今天早些时候遇到的情况之后,一个新的与 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")

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

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

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

谢谢!

4

1 回答 1

1

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

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")
于 2020-04-09T22:02:11.777 回答