我正在尝试使用do
fromdplyr
和tidy
frombroom
将一些东西整齐地组织到数据框中。一切正常。但是,现在我试图根据同一管道内的分组来改变一个值,但我不能让它为我想要的工作:
示例(带有mtcars
数据集):
library(dplyr)
library(broom)
mtcars %>% group_by(cyl) %>% mutate(n = n()) %>% do(tidy(summary(.$mpg)))
我希望得到summary
per cyl 的输出以及我在中间计算的观察次数。但是,我只得到summary
如下输出:
Source: local data frame [3 x 7]
Groups: cyl [3]
cyl minimum q1 median mean q3 maximum
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 4 21.4 22.80 26.0 26.66 30.40 33.9
2 6 17.8 18.65 19.7 19.74 21.00 21.4
3 8 10.4 14.40 15.2 15.10 16.25 19.2
n
缺少输出值。
我也尝试过bind_cols
,inner_join
如下所示,两者都导致错误如下所示:
mtcars %>% group_by(cyl) %>% mutate(mpgMean = mean(mpg)) %>% inner_join(., do(tidy(summary(.$mpg))))
Error in args[[1]] : subscript out of bounds
mtcars %>% group_by(cyl) %>% mutate(n = n()) %>% bind_cols(do(tidy(summary(.$mpg))))
Error in args[[1]] : subscript out of bounds
知道我怎样才能完成这项工作吗?
我的预期输出是:
Joining by: "cyl"
Source: local data frame [3 x 8]
cyl n minimum q1 median mean q3 maximum
<dbl> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 4 11 21.4 22.80 26.0 26.66 30.40 33.9
2 6 7 17.8 18.65 19.7 19.74 21.00 21.4
3 8 14 10.4 14.40 15.2 15.10 16.25 19.2
当然,我可以这样做得到这个结果:
inner_join(count(mtcars, cyl), mtcars %>% group_by(cyl) %>% do(tidy(summary(.$mpg))))
但是,寻找单管解决方案(如果可能)。