问题:有没有办法引用原始数据集,或者(最好是)从链中直接在group_by()
之前引用数据集?
nrow(mtcars)
32(但我们都知道)
> mtcars %>% group_by(cyl) %>% summarise(count = n())
# A tibble: 3 x 2
cyl count
<dbl> <int>
1 4 11
2 6 7
3 8 14
太好了。
mtcars %>%
group_by(cyl) %>%
summarise(count = n(),
prop = n()/SOMETHING)
我知道我可以在其中放nrow(mtcars)
,但这只是MRE。在更复杂的运营链中,这不是一个选择。
编辑:我简化了MRE。我知道“。”但是我实际上希望能够将临时选项传递给另一个函数(在summarise调用内),因此下面的assign解决方案完全可以满足我的要求。谢谢。
答案 0 :(得分:1)
我们可以使用add_count
来计算数字并在原始数据帧中创建一个新列。如果我们需要更复杂的操作,则可以从那里进一步使用mutate
。
library(dplyr)
library(tidyr)
mtcars %>%
group_by(cyl) %>%
add_count()
# # A tibble: 32 x 12
# # Groups: cyl [3]
# mpg cyl disp hp drat wt qsec vs am gear carb n
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
# 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 7
# 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 7
# 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 11
# 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 7
# 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 14
# 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 7
# 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 14
# 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 11
# 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 11
# 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 7
# # ... with 22 more rows
答案 1 :(得分:1)
您在“。”之后:
mtcars %>%
group_by(cyl) %>%
summarise(count = n(),
prop = n()/nrow(.)) %>%
ungroup()