我想使用数据框计算唯一的组合 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
链中的先前步骤.
有一个叫功能group_by_all()
(和在同样的意义group_by_at
和group_by_if
),这正是这么做的.
library(dplyr)
dat %>%
group_by_all() %>%
summarise(n = n())
Run Code Online (Sandbox Code Playgroud)
给出相同的结果,
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
PS
packageVersion('dplyr')
#[1] ‘0.7.2’
Run Code Online (Sandbox Code Playgroud)