2014-09-25 77 views
1

选择列时,我得到一个专栏中,我没有选择,但它是一个GROUP_BY柱:我连我都没有选择dplyr:让GROUP_BY列,即使不选择它

library(magrittr) 
library(dplyr) 

df <- data.frame(i=c(1,1,1,1,2,2,2,2), j=c(1,2,1,2,1,2,1,2), x=runif(8)) 

df %>% 
    group_by(i,j) %>% 
    summarize(s=sum(x)) %>% 
    filter(i==1) %>% 
    select(s) 

我获得列:

i   s 
1 1 0.8355195 
2 1 0.9322474 

为什么会发生这种情况(为什么不列j?)以及如何避免它?好吧,我可以开始过滤...

+0

这是一个'dplyr'问题,不是'magrittr' – BrodieG 2014-09-25 13:26:24

+0

您使用'GROUP_BY()'。 – jazzurro 2014-09-25 13:32:19

回答

4

这是因为默认情况下进行分组变量。请参阅the dplyr vignette

分组影响动词如下:分组select()是一样的未分组select(),除了分组变量始终被保留。

注意,(各)summarize剥离分组的一层(在你的情况,j),所以summarize之后,你的数据仅由i分组和印在输出中。如果你不希望出现这种情况,您可以选择s前取消对数据:

require(dplyr) 
df %>% 
    group_by(i,j) %>% 
    summarize(s=sum(x)) %>% 
    ungroup() %>% 
    filter(i==1) %>% 
    select(s) 
#Source: local data frame [2 x 1] 
# 
#   s 
#1 1.129867 
#2 1.265131 
+0

@beginnR太好了,谢谢 – JerryWho 2014-09-25 13:37:02