Группировать по пропорциям в R - PullRequest
0 голосов
/ 29 января 2019

Ниже приведены данные,

  library(dplyr)
  data(mtcars)

> mtcars %>% group_by(gear) %>% summarise(gear_count = n())
   A tibble: 3 x 2
   gear gear_count
  <dbl>      <int>
1     3         15
2     4         12
3     5          5

> mtcars %>% group_by(gear, vs) %>% summarise(gear_vs_count = n())
# A tibble: 6 x 3
# Groups:   gear [?]
   gear    vs gear_vs_count
  <dbl> <dbl>         <int>
1     3     0            12
2     3     1             3
3     4     0             2
4     4     1            10
5     5     0             4
6     5     1             1

Я хочу скомпилировать следующее,

   gear    vs    gear_vs_count      gear_count      ratio
  <dbl> <dbl>         <int>
1     3     0            12            15            0.8
2     3     1             3            15            0.2
3     4     0             2            12            0.16  
4     4     1            10            12            0.84
5     5     0             4             5            0.8
6     5     1             1             5            0.2

Один из способов сделать это - присоединиться.Я думаю, что должен быть легкий путь через dplyr.Кто-нибудь может помочь мне в этом?

Спасибо

1 Ответ

0 голосов
/ 29 января 2019

Мы можем использовать count и group_by.

mtcars %>%
    count(gear, vs) %>%
    group_by(gear) %>%
    mutate(gear_count = sum(n), ratio = n / sum(n))

#    gear    vs     n gear_count ratio
#   <dbl> <dbl> <int>      <int> <dbl>
# 1     3     0    12         15 0.8  
# 2     3     1     3         15 0.2  
# 3     4     0     2         12 0.167
# 4     4     1    10         12 0.833
# 5     5     0     4          5 0.8  
# 6     5     1     1          5 0.2  

Если вы хотите изменить имя столбца с n на gear_vs_count, просто передайте rename('gear_vs_count' = 'n') до концакод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...