r - 在 dplyr group_by 中选择减号运算符

标签 r dplyr

有没有人知道在使用 dplyr::group_by 时选择“所有但只有一个”(或“只有少数”)列的快速方法吗? ?
最终,我只想在删除几个选择列后聚合所有不同的行,但我不想每次都明确列出所有分组列(因为在我的分析中这些列被频繁添加和删除)。

例子:

 > df <- data_frame(a = c(1,1,2,2), b = c("foo", "foo", "bar", "bar"), c = runif(4))
 > df
 Source: local data frame [4 x 3]

       a     b          c
   (dbl) (chr)      (dbl)
 1     1   foo 0.95460749
 2     1   foo 0.05094088
 3     2   bar 0.93032589
 4     2   bar 0.40081121

现在我想通过 a 聚合和 b ,所以我可以这样做:
 > df %>% group_by(a, b) %>% summarize(mean(c))
 Source: local data frame [2 x 3]
 Groups: a [?]

       a     b   mean(c)
   (dbl) (chr)     (dbl)
 1     1   foo 0.5027742
 2     2   bar 0.6655686

伟大的。
但是,我真的很想能够做一些事情,比如只指定 不是 c ,类似于 dplyr::select(-c) :
 > df %>% select(-c)
 Source: local data frame [4 x 2]

       a     b
   (dbl) (chr)
 1     1   foo
 2     1   foo
 3     2   bar
 4     2   bar

但是group_by可以应用表达式,因此等效项不起作用:
 > df %>% group_by(-c) %>% summarize(mean(c))
 Source: local data frame [4 x 2]

            -c    mean(c)
         (dbl)      (dbl)
 1 -0.95460749 0.95460749
 2 -0.93032589 0.93032589
 3 -0.40081121 0.40081121
 4 -0.05094088 0.05094088

任何人都知道我是否只是缺少帮助我快速完成此操作的基本功能或快捷方式?

用例示例:如果 df突然获得新专栏d ,我希望下游代码现在聚合 a 的唯一组合。 , b , 和 d ,无需我明确添加 dgroup_by称呼。)

最佳答案

在当前版本的 dplyr 中,函数 group_by_at ,连同 vars ,实现了这个目标:

df %>% group_by_at(vars(-c)) %>% summarize(mean(c))
# A tibble: 2 x 3
# Groups:   a [?]
      a     b  `sum(c)`
  <dbl> <chr>     <dbl>
1     1   foo 0.9851376
2     2   bar 1.0954412

似乎已于 2017 年 6 月在 dplyr 0.7.0 中引入

关于r - 在 dplyr group_by 中选择减号运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36266745/

相关文章:

r - 在函数中使用可变数量的组

r - 为什么排名函数对所有国家都给予同等的排名?

r - 为什么不能使用列名向量来过滤 data.table 中的行?

r - 编织时如何将输出发送到控制台而不是文档

R:查找低于阈值的连续值

r - 循环遍历 tibble 列时获取 map-loop-element 的名称

r - 如何将循环结构更改为 sapply 函数?

r - 如何在R中获取脚本路径? [复制]

r - 如何将变量名传递给 dplyr 的 group_by()

将 NA 值替换为组中的数值