2014-09-25 41 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