2015-02-01 7 views
2

Как я где-то видел, когда имеется несколько слоев group_by(), одно суммирование() отслаивается от слоя группировки. В sql есть «группа для всех». Интересно, есть ли способ, чтобы отменить все группировки в dplyr (так что, например, мы можем получить максимум из всех, а не из каждой группы)Dplyr: как group_by (все)

Пример:

library(dplyr) 
library(car) 

mtcars %>% 
    select(cyl, gear, carb) %>% 
    group_by(cyl, gear) %>% 
    summarise(count = n()) %>% 
    arrange(desc(count)) 

Выход:

Source: local data frame [8 x 3] 
Groups: cyl 

    cyl gear count 
1 4 4  8 
2 4 5  2 
3 4 3  1 
4 6 4  4 
5 6 3  2 
6 6 5  1 
7 8 3 12 
8 8 5  2 

Таким образом, данные были group_by (cyl, gear): два слоя группировки. Сумматор() подсчитал, сколько автомобилей в каждой группе (цил, шестерня), а затем снимает слой group_by (gear). Теперь данные group_by (cyl). Как вы можете видеть, порядок спуска работает только для каждого цил. (Спуск в строке 1-3 для цил == 4, спуск в линии 4-6 для cyl == 6, ...). Как мы можем получить спуск всех 8 линий? (Линия 7 должна быть первой линией.)

Другим примером того, как итог() кожица группировки:

mtcars %>% 
    select(cyl, gear, carb) %>% 
    group_by(cyl, gear) %>% 
    summarise(count = n()) 

Output: 
Source: local data frame [8 x 3] 
Groups: cyl 

    cyl gear count 
1 4 3  1 
2 4 4  8 
3 4 5  2 
4 6 3  2 
5 6 4  4 
6 6 5  1 
7 8 3 12 
8 8 5  2 

--- 
mtcars %>% 
    select(cyl, gear, carb) %>% 
    group_by(cyl, gear) %>% 
    summarise(count = n()) %>% 
    summarise(count1 = max(count)) 


Output: 
Source: local data frame [3 x 2] 

    cyl count1 
1 4  8 
2 6  4 
3 8  12 

--- 

mtcars %>% 
    select(cyl, gear, carb) %>% 
    group_by(cyl, gear) %>% 
    summarise(count = n()) %>% 
    summarise(count1 = max(count)) %>% 
    summarise(max(count1)) 

Output: 

Source: local data frame [1 x 1] 

    max(count1) 
1   12 
+5

Вы ищете 'ungroup'? Как в 'mtcars%>% select (cyl, gear, carb)%>% group_by (cyl, gear)%>% summary (count = n())%>% ungroup()%>% аранжировать (desc (count)) '? Кроме того, для чего вы используете 'fix'? Вы слышали о «Просмотр»? –

+0

'Просмотр' только для RStudio, нет? OP не упоминает RStudio, поэтому они могут и не использовать его (OP - стоит попробовать, вкладка-завершение в RStudio - это огромная экономия времени, это всего лишь один из многих удобств) – Ben

+0

@Ben также существует в базе R –

ответ

2

Как упоминался Давидом в комментариях, вы ищете ungroup():

library(dplyr) 

mtcars %>% 
    select(cyl, gear) %>% 
    group_by(cyl, gear) %>% 
    summarise(count = n()) %>% 
    ungroup() %>% 
    arrange(desc(count)) 

Вы получите:

#Source: local data frame [8 x 3] 
# 
# cyl gear count 
#1 8 3 12 
#2 4 4  8 
#3 6 4  4 
#4 4 5  2 
#5 6 3  2 
#6 8 5  2 
#7 4 3  1 
#8 6 5  1 

Примечание: В вашем примере, вы select()carb переменная, но она никогда не используется, потому что вы summarise() группы cyl, gear. Я удалил его из ответа.

Смежные вопросы