在R中按比例分组

时间:2019-01-29 19:14:11

标签: r dplyr

以下是数据,

  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 :(得分:3)

我们可以使用countgroup_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')移至代码末尾即可。