таблица expss с процентами строк во вложенных переменных в R - PullRequest
2 голосов
/ 28 сентября 2019

При использовании пакета expss в R для создания таблиц, как получить вычисление row_percentages во вложенной переменной?В приведенном ниже примере я бы хотел, чтобы процент строк вычислялся в течение каждого периода времени.Таким образом, я хотел бы, чтобы процент строки составлял 100% в каждый период времени (2015–2016 и 2017–2018 годы).Теперь, однако, процент вычисляется по всей строке.

library(expss)

data(mtcars)

mtcars$period <- "2015-2016"
mtcars <- rbind(mtcars, mtcars)
mtcars$period[33:64] <- "2017-2018"

mtcars = apply_labels(mtcars,
                      cyl = "Number of cylinders",
                      am = "Transmission",
                      am = c("Automatic" = 0,
                             "Manual"=1),
                      period = "Measurement period"
)

mtcars %>% 
  tab_cells(cyl) %>% 
  tab_cols(period %nest% am) %>% 
  tab_stat_rpct(label = "row_perc") %>% 
  tab_pivot()

Создано в 2019-09-28 пакетом Представить (v0.3.0)

 |                     |              |          | Measurement period |        |              |        |
 |                     |              |          |          2015-2016 |        |    2017-2018 |        |
 |                     |              |          |       Transmission |        | Transmission |        |
 |                     |              |          |          Automatic | Manual |    Automatic | Manual |
 | ------------------- | ------------ | -------- | ------------------ | ------ | ------------ | ------ |
 | Number of cylinders |            4 | row_perc |               13.6 |   36.4 |         13.6 |   36.4 |
 |                     |            6 | row_perc |               28.6 |   21.4 |         28.6 |   21.4 |
 |                     |            8 | row_perc |               42.9 |    7.1 |         42.9 |    7.1 |
 |                     | #Total cases | row_perc |               19.0 |   13.0 |         19.0 |   13.0 |

1 Ответ

1 голос
/ 28 сентября 2019

Я считаю, что это то, что вам нужно:

library(expss)

data(mtcars)

mtcars$period <- "2015-2016"
mtcars <- rbind(mtcars, mtcars)
mtcars$period[33:64] <- "2017-2018"

mtcars = apply_labels(mtcars,
                      cyl = "Number of cylinders",
                      am = "Transmission",
                      am = c("Automatic" = 0,
                             "Manual"=1),
                      period = "Measurement period"
)

mtcars %>% 
  tab_cells(cyl) %>% 
  tab_cols(period %nest% am ) %>% 
  tab_subgroup(period =="2015-2016") %>%
  tab_stat_rpct(label = "row_perc") %>%
  tab_subgroup(period =="2017-2018") %>%
  tab_stat_rpct(label = "row_perc") %>%
  tab_pivot(stat_position = "inside_rows")

Обратите внимание на использование tab_subgroup(), которое определяет, в какой подгруппе периода года мы хотим рассчитать процент, а также stat_position = "inside_rows"который определяет, куда мы хотим поместить вычисленный результат в финальную таблицу.

Выход:

 |                     |              |          | Measurement period |        |              |        |
 |                     |              |          |          2015-2016 |        |    2017-2018 |        |
 |                     |              |          |       Transmission |        | Transmission |        |
 |                     |              |          |          Automatic | Manual |    Automatic | Manual |
 | ------------------- | ------------ | -------- | ------------------ | ------ | ------------ | ------ |
 | Number of cylinders |            4 | row_perc |               27.3 |   72.7 |              |        |
 |                     |              |          |                    |        |         27.3 |   72.7 |
 |                     |            6 | row_perc |               57.1 |   42.9 |              |        |
 |                     |              |          |                    |        |         57.1 |   42.9 |
 |                     |            8 | row_perc |               85.7 |   14.3 |              |        |
 |                     |              |          |                    |        |         85.7 |   14.3 |
 |                     | #Total cases | row_perc |               19.0 |   13.0 |              |        |
 |                     |              |          |                    |        |         19.0 |   13.0 |

РЕДАКТИРОВАТЬ:

Нам не нужно%nest% если мы не хотим вложенных строк ( т.е. в два раза больше строк).В этом случае заключительная часть кода должна быть изменена следующим образом:

mtcars %>% 
  tab_cells(cyl) %>% 
  tab_cols(period,am) %>% 
  tab_subgroup(period ==c("2015-2016")) %>%
  tab_stat_rpct(label = "row_perc") %>%
  tab_subgroup(period ==c("2017-2018")) %>%
  tab_stat_rpct(label = "row_perc") %>%
  tab_pivot(stat_position = "outside_columns")

Вывод:

 |                     |              | Measurement period | Transmission |          |           |
 |                     |              |          2015-2016 |    Automatic |   Manual | Automatic |
 |                     |              |           row_perc |     row_perc | row_perc |  row_perc |
 | ------------------- | ------------ | ------------------ | ------------ | -------- | --------- |
 | Number of cylinders |            4 |                100 |         27.3 |     72.7 |      27.3 |
 |                     |            6 |                100 |         57.1 |     42.9 |      57.1 |
 |                     |            8 |                100 |         85.7 |     14.3 |      85.7 |
 |                     | #Total cases |                 32 |         19.0 |     13.0 |      19.0 |

          | Measurement period |
   Manual |          2017-2018 |
 row_perc |           row_perc |
 -------- | ------------------ |
     72.7 |                100 |
     42.9 |                100 |
     14.3 |                100 |
     13.0 |                 32 |
...