Как умножить анализы в соответствии с модальностями третьей переменной? - PullRequest
0 голосов
/ 21 января 2020

Я работаю над большой базой данных, в которой я хотел бы составить цепную таблицу (x) в соответствии с модальностями третьей (а также четвертой) переменной и агрегировать результаты. Я немного блокирую, я не знаю, как это сделать.

Вот структура моего фрейма данных (данных):

age   dead     work    sex
56       1       44      M
20       0       20      F
71       0       62      F
26       1       A0      M
44       0       80      F
19       0       01      M
77       0       78      M
51       0       13      F
56       1       Z0      F

Каждая строка индивидуальна. У него есть возраст, он мертв или жив, у него есть профессия (это работа в колонке, которая содержит код профессии: «02» - это научный c, «88» - работник металлургии, «A0» - военный, et c.) и пол (мужской / женский).

Я просто хочу создать таблицы смертности. Это просто с:

table(data$age, data$dead)

Вот результат для полной базы данных, например:

 age  dead=0  dead=1
  ..    ....       .
  25    1725       0
  26    3627       1
  27     336       0
  28    3339       1
  30  275648     856
  31   90932     258
  32  120743     268
  33  587954    1023
  36  148610      57
  39    5101       7
  40   15960      43
  41  102273     336
  42  147941     174
  43   69216      43
  44   43178      37
  45    3074       0
  47    1424       1
  48    3471       1
  49   12048       3
  50      85       0
  51   45138     110
  52   84804     147
  53    4614      16
  54   19241      46
  55   86021     160
  ..    ....       .

Теперь я хотел бы сделать это для каждой категории переменной «работа» , Вручную, это просто для определенной категории c, например, научной:

table(data$age[data$class=="02"],data$dead[data$class=="02"])

Я ищу, как сделать это автоматически:

1) для каждой категории работы переменная. Переменная не является непрерывной (..., 11, 12, 13, 14, 19, 20, ...) и иногда есть буквы (A0, Z0);

2) и для каждой категории, Я хотел бы различать мужчин и женщин (таблица для научных c мужчин и таблица для научных c женщин);

3) Затем агрегировать результаты нескольких таблиц (данных) в кадре данных где соединение это возраст. Таким образом, в каждом столбце указывается количество людей по возрасту для определенного c пола и профессии.

Вы можете мне помочь?

Большое спасибо!

1 Ответ

0 голосов
/ 21 января 2020

Функция table() может создавать таблицы сопряженности любого количества уровней. Вы можете передать весь свой фрейм данных, затем сгладить и изменить его форму (при условии, что я правильно понял).

library(tidyr)

table(df) %>%
  as.data.frame() %>%
  pivot_wider(names_from = age, values_from = Freq)

# A tibble: 36 x 11
   dead  work  sex    `19`  `20`  `26`  `44`  `51`  `56`  `71`  `77`
   <fct> <fct> <fct> <int> <int> <int> <int> <int> <int> <int> <int>
 1 0     01    F         0     0     0     0     0     0     0     0
 2 1     01    F         0     0     0     0     0     0     0     0
 3 0     13    F         0     0     0     0     1     0     0     0
 4 1     13    F         0     0     0     0     0     0     0     0
 5 0     20    F         0     1     0     0     0     0     0     0
 6 1     20    F         0     0     0     0     0     0     0     0
 7 0     44    F         0     0     0     0     0     0     0     0
 8 1     44    F         0     0     0     0     0     0     0     0
 9 0     62    F         0     0     0     0     0     0     1     0
10 1     62    F         0     0     0     0     0     0     0     0
# ... with 26 more rows

Оттуда вы можете дополнительно разделить, изменить или отфильтровать, если необходимо.

Данные:

df <- structure(list(age = c(56L, 20L, 71L, 26L, 44L, 19L, 77L, 51L, 
56L), dead = c(1L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 1L), work = structure(c(4L, 
3L, 5L, 8L, 7L, 1L, 6L, 2L, 9L), .Label = c("01", "13", "20", 
"44", "62", "78", "80", "A0", "Z0"), class = "factor"), sex = structure(c(2L, 
1L, 1L, 2L, 1L, 2L, 2L, 1L, 1L), .Label = c("F", "M"), class = "factor")), class = "data.frame", row.names = c(NA, 
-9L))
...