2016-01-16 4 views
6

Vorrei utilizzare summarise_each() per applicare più funzioni a un set di dati raggruppato. Tuttavia, piuttosto che applicare ogni funzione a tutte le colonne, vorrei applicare ogni funzione a determinati sottoinsiemi. Mi rendo conto che potrei farlo specificando ogni colonna con summarise(), ma ho molte variabili.dplyr summarise_each() che utilizza più funzioni per diversi sottoinsiemi di colonne tra gli stessi gruppi

Esiste una soluzione alternativa al o 1) utilizzando summarise_each() e quindi eliminare le colonne non necessarie o 2) salvare il risultato group_by() eseguire più summarise_each() operazioni distinte e combinando i risultati?

Se questo non è chiaro, fammelo sapere e posso provare a illustrare con qualche codice di esempio.

+2

Io suggerisco di illustrare con dati di esempio, esempio di output, e il codice Hai provato/ha. – Gopala

+0

In tal caso, fai un loop tra le colonne di interesse e fai il 'riepilogo 'con' lapply' o usa 'Mappa' con le corrispondenti funzioni per le corrispondenti colonne di interesse – akrun

+0

riguardo alla tua domanda" 1) usando summarise_each() e poi eliminando l'inutile colonne "puoi specificare all'interno di' summarise_each' quali colonne non devono essere usate (ma nota che non faranno parte dell'output a meno che non stiano raggruppando le colonne. –

risposta

1

Suggerirei quanto segue: qui vorrei applicare la funzione min ad una variabile e la funzione massima ad altro. Quindi semplicemente unisco quelli con la variabile di raggruppamento.

> by_species <- iris %>% group_by(Species)  

Inizia con variabile per la quale voglio applicare la funzione min:

min_var < - by_species%>% summarise_each (funs (min), Petal.Width) min_var Fonte: locale frame di dati [3 x 2]

 Species Petal.Width 
     (fctr)  (dbl) 
1  setosa   0.1 
2 versicolor   1.0 
3 virginica   1.4 

Poi la variabile per la quale voglio applicare la funzione max:

max_var < - by_species%>% summarise_each (funs (max), Sepal.Width) max_var Fonte: locale frame di dati [3 x 2]

 Species Sepal.Width 
     (fctr)  (dbl) 
1  setosa   4.4 
2 versicolor   3.4 
3 virginica   3.8 

Ora, dobbiamo solo unire i due precedenti:

left_join (min_var, max_var) Partecipare da: "Specie" Fonte: fra i dati locali me [3 x 3]

 Species Petal.Width Sepal.Width 
    (fctr)  (dbl)  (dbl) 
1  setosa   0.1   4.4 
2 versicolor   1.0   3.4 
3 virginica   1.4   3.8 
+0

Grazie Rushad. Questa è esattamente la soluzione alternativa di cui mi riferivo nell'opzione (2) sopra, è quello che sto attualmente usando, ma grazie per la risposta dettagliata +1 –