2014-04-09 16 views
11

Posso riassumere un frame di dati con dplyr come questo:dplyr alla classe di potenza data.frame

mtcars %.% 
group_by(cyl) %.% 
summarise(mean(mpg)) 

per convertire l'uscita torna in classe data.frame, il mio approccio attuale è questa:

as.data.frame(mtcars %.% 
group_by(cyl) %.% 
summarise(mean(mpg))) 

C'è un modo per ottenere dplyr per l'output di una classe data.frame senza dover utilizzare as.data.frame?

+0

Avvolgere la prima chiamata in 'str':' Classi tbl_df ', 'tbl' e 'dei dati .frame'', o 'is.data.frame':' [1] TRUE'. – Henrik

+0

che dire di ddply nel pacchetto plyr? Credo che questo sia il suo scopo –

+0

@Arun Mi trovo spesso a convertirmi in un frame di dati per eliminare il comportamento di stampa estremamente irritante (almeno per me) (sopprimere le colonne) sulla console. – joran

risposta

16

Come è stato sottolineato nei commenti, potrebbe non essere necessario convertirlo poiché potrebbe essere sufficiente che erediti dal frame di dati. Se questo non è abbastanza buono allora questo utilizza ancora as.data.frame ma è leggermente più elegante:

mtcars %>% 
    group_by(cyl) %>% 
    summarise(mean(mpg)) %>% 
    as.data.frame() 

AGGIUNTO Ho appena letto nei commenti che la ragione si desidera che questo è quello di evitare il troncamento di stampa. In questo caso basta definire questa opzione, possibilmente nel file .Rprofile:

options(dplyr.print_max = Inf) 

(Si noti che si può ancora colpire il massimo definito dall'opzione "max.print" associata a stampa, in modo che avrebbe bisogno di impostare anche quello se anche troppo basso per voi)

Aggiornamento:. Modificato %.%-%>% per riflettere i cambiamenti dplyr.

1

In aggiunta a quanto detto sopra G. Grothendieck, è possibile convertirlo in un nuovo dataframe:

new_summary <- mtcars %>% 
    group_by(cyl) %>% 
    summarise(mean(mpg)) %>% 
    as.data.frame()