2015-09-07 15 views
5

Mi manca qualcosa con il modo in cui i livelli in dplyr vengono rimossi. Nell'esempio qui di seguito, gruppo da 2 colonne, riassumere i valori in una singola variabile, quindi ordinare da tale nuova variabile:dplyr: Disporre di non comportarsi come previsto dopo group_by e riepilogare

mtcars %>% group_by(cyl, gear) %>% 
    summarize(hp_range = max(hp) - min(mpg)) %>% 
    arrange(desc(hp_range)) 

# Source: local data frame [8 x 3] 
# Groups: cyl [3] 
# 
# cyl gear hp_range 
# (dbl) (dbl) (dbl) 
#1  4  4 87.6 
#2  4  5 87.0 
#3  4  3 75.5 
#4  6  5 155.3 
#5  6  4 105.2 
#6  6  3 91.9 
#7  8  5 320.0 
#8  8  3 234.6 

Ovviamente questo non è ordinato da hp_range come previsto. Cosa mi manca?

MODIFICA: L'esempio funziona come previsto senza la chiamata a desc nell'organizzazione. Ancora non chiaro perché?

risposta

8

Ok, appena avuto modo di fondo di questo:

  1. La chiamata a desc non ha avuto effetto, è stato un caso che l'esempio non ha funzionato senza di essa
  2. La chiave è che quando si group_by colonne multiple, sembra che i risultati siano ordinati automaticamente dai Gruppi. Nell'esempio sopra è ordinato per cyl. Per ottenere il tipo previsto di tutta la tabella di dati, è necessario prima ungroup e poi arrange

    mtcars %>% group_by(cyl, gear) %>% 
        summarize(hp_range = max(hp) - min(mpg)) %>% 
        ungroup() %>% 
        arrange(hp_range) 
    
+0

Volevo solo dirti che tutte le vostre domande e le risposte finora su questo sito sono stati molto buoni. Buone spiegazioni chiare insieme ad esempi riproducibili. Quindi grazie! –

Problemi correlati