Рассчитать процент от общего количества после того, как group_by и count () были применены к переменной - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь вычислить общий процент для сгруппированной переменной. У меня есть фрейм данных с переменной курения

> 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)" не пересекает группы. Как рассчитать сумму ЧЕРЕЗ группы, а не внутри них? Спасибо за любую помощь!

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Запишите это как ответ для потомков:

df %>% 
  group_by(smoking) %>%
  filter(!is.na(smoking)) %>%
  count() %>% 
  ungroup() %>% 
  mutate(percent = 100 * n / sum(n))

К лучшему или к худшему, когда вы запустите count(), он не разгруппирует фрейм данных.

0 голосов
/ 03 марта 2020
> df[!is.na(smoking),] %>% count (smoking) %>% mutate (percent=n/sum(n)*100)

^ Попробуйте выше

...