我想在dplyr::summarise
中使用组的大小作为分组操作的一部分。
E.g按柱面计算手册的比例,将cars
数据按cyl
分组,并将手册数除以组的大小:
mtcars %>%
group_by(cyl) %>%
summarise(zz = sum(am)/group_size(.))
但是,(我认为),因为group_size
位于分组tbl_df
之后且.
未分组,因此返回
Error in mutate_impl(.data, dots) : basic_string::resize
有办法做到这一点吗?
答案 0 :(得分:3)
您可以使用n()
来获取组
library(dplyr)
mtcars %>%
group_by(cyl) %>%
summarise(zz = sum(am)/n())
# cyl zz
# <dbl> <dbl>
#1 4.00 0.727
#2 6.00 0.429
#3 8.00 0.143
答案 1 :(得分:1)
这只是mean
mtcars %>%
group_by(cyl) %>%
summarise(zz = mean(am))
# A tibble: 3 x 2
# cyl zz
# <dbl> <dbl>
#1 4 0.727
#2 6 0.429
#3 8 0.143
如果我们需要使用group_size
library(tidyverse)
mtcars %>%
group_by(cyl) %>%
nest %>%
mutate(zz = map_dbl(data, ~ sum(.x$am)/group_size(.x))) %>%
arrange(cyl) %>%
select(-data)
# A tibble: 3 x 2
# cyl zz
# <dbl> <dbl>
#1 4 0.727
#2 6 0.429
#3 8 0.143
或使用do
mtcars %>%
group_by(cyl) %>%
do(data.frame(zz = sum(.$am)/group_size(.)))
# A tibble: 3 x 2
# Groups: cyl [3]
# cyl zz
# <dbl> <dbl>
#1 4 0.727
#2 6 0.429
#3 8 0.143