使用dplyr和group_by,有没有办法引用原始(完整)数据集?

时间:2019-11-03 03:31:50

标签: r dplyr tidyr

问题:有没有办法引用原始数据集,或者(最好是)从链中直接在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解决方案完全可以满足我的要求。谢谢。

2 个答案:

答案 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()