如何group_by(everything())

Wie*_*314 3 r dplyr

我想使用数据框计算唯一的组合 dplyr

我尝试了以下方法:

require(dplyr)

set.seed(314)
dat <- data.frame(a = sample(1:3, 100, replace = T),
                  b = sample(1:2, 100, replace = T),
                  c = sample(1:2, 100, replace = T))

dat %>% group_by(a,b,c) %>% summarise(n = n())
Run Code Online (Sandbox Code Playgroud)

但为了使这个通用(与列的名称无关),我试过:

dat %>% group_by(everything()) %>% summarise(n = n())
Run Code Online (Sandbox Code Playgroud)

结果如下:

    a     b     c     n
<int> <int> <int> <int>
1      1     1     1     6
2      1     1     2     8
3      1     2     1    13
4      1     2     2     8
5      2     1     1     7
6      2     1     2    12
7      2     2     1    14
8      2     2     2    10
9      3     1     1     3
10     3     1     2     4
11     3     2     1     7
12     3     2     2     8
Run Code Online (Sandbox Code Playgroud)

这给出了错误

Error in mutate_impl(.data, dots) : `c(...)` must be a character vector
Run Code Online (Sandbox Code Playgroud)

我摆弄着不同的东西,却无法让它发挥作用.我知道我可以使用,names(dat)但数据框中需要包含的列group_by()取决于dplyr链中的先前步骤.

Sot*_*tos 5

有一个叫功能group_by_all()(和在同样的意义group_by_atgroup_by_if),这正是这么做的.

library(dplyr)

dat %>% 
 group_by_all() %>% 
 summarise(n = n())
Run Code Online (Sandbox Code Playgroud)

给出相同的结果,

# A tibble: 12 x 4
# Groups:   a, b [?]
       a     b     c     n
   <int> <int> <int> <int>
 1     1     1     1     6
 2     1     1     2     8
 3     1     2     1    13
 4     1     2     2     8
 5     2     1     1     7
 6     2     1     2    12
 7     2     2     1    14
 8     2     2     2    10
 9     3     1     1     3
10     3     1     2     4
11     3     2     1     7
12     3     2     2     8
Run Code Online (Sandbox Code Playgroud)

PS

packageVersion('dplyr')
#[1] ‘0.7.2’
Run Code Online (Sandbox Code Playgroud)