以下是数据,
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。有人可以帮我吗?
谢谢
答案 0 :(得分:3)
我们可以使用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')
移至代码末尾即可。