Повторяющиеся строки, встречающиеся с перекрывающимися промежуточными итогами в таблицах expss - PullRequest
0 голосов
/ 08 апреля 2020

Новый вопрос, связанный с 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

Спасибо!

1 Ответ

1 голос
/ 10 апреля 2020

Если ваши промежуточные итоги имеют перекрывающиеся элементы, вы можете скрыть эти элементы с неожиданно названной функцией «скрыть». В настоящее время нет функции для пользовательского позиционирования промежуточных итогов. Тем не менее, мы можем получить желаемый результат с помощью небольшого трюка:

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")
...