Roman Cheplyaka Roman Cheplyaka - 11 months ago 46
R Question

How to group by all but one columns?

How do I tell

to group the data by all columns except a given one?

, it would be
aggregate(x ~ ., ...)

I tried
group_by(data, -x)
, but that groups by the negative-of-x (i.e. the same as grouping by x).

Answer Source

You can do this using standard evaluation (group_by_ instead of group_by):

# Fake data
dat = data.frame(value=rnorm(1000), g1=sample(LETTERS,1000,replace=TRUE),
                 g2=sample(letters,1000,replace=TRUE), g3=sample(1:10, replace=TRUE),

dat %>% group_by_(.dots=names(dat)[-grep("value", names(dat))]) %>%
       g1     g2    g3  other   meanValue
   <fctr> <fctr> <int> <fctr>       <dbl>
1       A      a     2  green  0.89281475
2       A      b     2    red -0.03558775
3       A      b     5  black -1.79184218
4       A      c    10  black  0.17518610
5       A      e     5  black  0.25830392

See this vignette for more on standard vs. non-standard evaluation in dplyr.