有没有人知道在使用 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
,无需我明确添加 d
到 group_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/