我如何告诉group_by按所有列(给定列除外)对数据进行分组?

如果是aggregate,那就是aggregate(x ~ ., ...).

我试了group_by(data, -x)次,但结果是按x的负方向分组(即与按x分组相同).

推荐答案

您可以使用标准判断(group_by_而不是group_by)来实现这一点:

# Fake data
set.seed(492)
dat = data.frame(value=rnorm(1000), g1=sample(LETTERS,1000,replace=TRUE),
                 g2=sample(letters,1000,replace=TRUE), g3=sample(1:10, replace=TRUE),
                 other=sample(c("red","green","black"),1000,replace=TRUE))

dat %>% group_by_(.dots=names(dat)[-grep("value", names(dat))]) %>%
  summarise(meanValue=mean(value))
       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
...

关于dplyr中标准与非标准判断的更多信息,请参见this vignette.

UPDATE for dplyr 0.7.0

为了回应@ÖmerAn的 comments :在dplyr0.7.0中,group_by_at是最好的 Select (如果我错了,请有人纠正我).例如:

dat %>% 
  group_by_at(setdiff(names(dat), "value")) %>%
  summarise(meanValue=mean(value))
# Groups:   g1, g2, g3 [?]
       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
 6      A      e     5    red -0.81879788
 7      A      e     7  green  0.30836054
 8      A      f     2  green  0.05537047
 9      A      g     1  black  1.00156405
10      A      g    10  black  1.26884303
# ... with 949 more rows

让我们确认两种方法给出相同的输出(在dplyr 0.7.0中):

new = dat %>% 
  group_by_at(setdiff(names(dat), "value")) %>%
  summarise(meanValue=mean(value))

old = dat %>% 
  group_by_(.dots=names(dat)[-grep("value", names(dat))]) %>%
  summarise(meanValue=mean(value))

identical(old, new)
# [1] TRUE

R相关问答推荐

如何确保模块化lme4接受控制论点?

这两种创建S4对象的方法有何不同?

如何将多个数据帧附加到R中的多个相应的CSV文件中?

是否有R代码来判断一个组中的所有值是否与另一个组中的所有值相同?

在R中使用自定义函数时如何删除该函数的一部分?

将带有范围的字符串转换为R中的数字载体

在ggplot的注释表格中突出显示最大值

使用对管道内单元格的引用生成新变量

计算R中的威布尔分布的EDF

如何使用rmarkdown和kableExtra删除包含折叠行的表的第一列的名称

R等效于LABpascal(n,1)不同的列符号

MCMC和零事件二元逻辑回归

如何动态更新selectizeInput?

迭代通过1个长度的字符串长字符R

如何根据R中其他列的值有条件地从列中提取数据?

从服务器在Shiny中一起渲染图标和文本

Ggplot2中geom_tile的动态zoom

如何在R中通过多个变量创建交叉表?

`-`是否也用于数据帧,有时使用引用调用?

R中的Desolve:返回的导数数错误