У меня возникла проблема с простой цепочкой dplyr
, group_by
и summarise
.
У меня выпал 542 процедуры для разных диагнозов.Вот два выбранных столбца:
> data %>% select(Diagnosis, Split)
# A tibble: 542 x 2
Diagnosis Split
<dbl> <dbl>
1 5 4
2 3 3
3 1 1
4 1 1
5 3 3
6 1 1
7 1 1
8 2 2
9 7 4
10 1 1
# … with 532 more rows
Я хочу обобщить данные, чтобы увидеть, сколько процедур было выполнено для каждого диагноза:
> data %>% group_by(Diagnosis) %>% summarise(procedures =n())
# A tibble: 7 x 2
Diagnosis procedures
<dbl> <int>
1 1 262
2 2 91
3 3 63
4 4 36
5 5 37
6 6 31
7 7 22
Но теперь я бы лучше знал названия диагнозовтак как числа не имеют смысла, я создаю «справочную таблицу» вроде:
>diagNames <- c("1" = "ENT",
+ "2" = "MND",
+ "3" = "CVA",
+ "4" = "INJ",
+ "5" = "NEU",
+ "6" = "UNK",
+ "7" = "OES"
)
Затем я переписываю сгруппированную сводку так:
> data %>%
+ group_by (diagnosis = diagNames[Diagnosis]) %>%
+ summarise(procedures = n())
# A tibble: 7 x 2
diagnosis procedures
<chr> <int>
1 CVA 63
2 ENT 262
3 INJ 36
4 MND 91
5 NEU 37
6 OES 22
7 UNK 31
Пока порядоквыходной сигнал изменился в алфавитном порядке столбца диагностики, фактический выходной результат - именно то, что я хочу, и я мог бы arrange()
, если бы захотел.
Теперь у меня есть второй тиббл для другого набора427 процедур, на этот раз я хочу сгруппировать их по полу:
> data %>% select(Sex, Success)
# A tibble: 427 x 2
Sex Success
<dbl> <dbl>
1 0 1
2 1 1
3 0 1
4 0 1
5 0 1
6 0 1
7 1 0
8 1 1
9 1 1
10 1 1
# … with 417 more rows
> data %>%
group_by (Sex) %>%
summarise(procedures = n())
# A tibble: 2 x 2
Sex procedures
<dbl> <int>
1 0 157
2 1 270
Опять же, я бы предпочел, чтобы пол был читабельным текстом, а не забываемым числом.Итак, справочная таблица:
> genderNames <- c("0" = "Woman",
+ "1" = "Man"
+ )
Затем я переписываю сгруппированную сводку, используя почти тот же синтаксис, что и в первом примере:
> data %>%
+ group_by (gender = genderNames[Sex]) %>%
+ summarise(procedures = n())
Error: Column `gender` must be length 427 (the number of rows) or one, not 270
Почемуэто генерирует ошибку, когда первый пример не?
Я пытался устранить неполадки;Единственное отличие, которое я вижу, состоит в том, что «Диагноз» был от 1 до 7, тогда как «Секс» начинается с 0. Конечно, это не проблема?
Есть предложения?Спасибо