Я пытаюсь вычислить общий процент для сгруппированной переменной. У меня есть фрейм данных с переменной курения
> df$smoking
[1] NA "Previous" "Never" "Current" "Never"
[6] "Never" "Never" "Never" "Current" "Current"
[11] "Previous" "Never" "Never" "Previous" "Never"
[16] "Previous" "Previous" "Never" "Never" "Never"
[21] "Never" "Never" "Never" "Never" "Previous"
Я хочу сгруппировать по категориям, посчитать категорию и рассчитать процент от общего количества. Я могу точно рассчитать счет и исключить NA следующим образом:
> df %>%
+ group_by(smoking) %>%
+ filter(!is.na(smoking)) %>%
+ count()
# A tibble: 3 x 2
# Groups: smoking [3]
smoking n
<chr> <int>
1 Current 93
2 Never 380
3 Previous 213
>
Но тогда я не могу получить процент от каждого. Я посмотрел на несколько других решений, но они, похоже, не работают. Например, самый распространенный результат, который я видел, таков:
> df %>%
+ group_by(smoking) %>%
+ filter(!is.na(smoking)) %>%
+ count() %>%
+ mutate(percent = 100 * n / sum(n))
# A tibble: 3 x 3
# Groups: smoking [3]
smoking n percent
<chr> <int> <dbl>
1 Current 93 100
2 Never 380 100
3 Previous 213 100
>
Кажется, что "sum (n)" не пересекает группы. Как рассчитать сумму ЧЕРЕЗ группы, а не внутри них? Спасибо за любую помощь!