2016-06-29 13 views
5

Sto lottando un po 'con dplyr perché voglio fare due cose a una e mi chiedo se è possibile.nella funzione di riepilogo di dplyr

Voglio calcolare la media dei valori e allo stesso tempo la media per i valori che hanno un valore specifico in un'altra colonna.

library(dplyr) 
set.seed(1234) 
df <- data.frame(id=rep(1:10, each=14), 
       tp=letters[1:14], 
       value_type=sample(LETTERS[1:3], 140, replace=TRUE), 
       values=runif(140)) 

df %>% 
    group_by(id, tp) %>% 
    summarise(
    all_mean=mean(values), 
    A_mean=mean(values), # Only the values with value_type A 
    value_count=sum(value_type == 'A') 
) 

Così la colonna A_mean deve calcolare la media dei values dove value_count == 'A'.

Normalmente eseguirò due comandi separati e unirò i risultati in seguito, ma suppongo che ci sia un modo più pratico e semplicemente non capisco.

Grazie in anticipo.

risposta

8

Possiamo provare

df %>% 
    group_by(id, tp) %>% 
    summarise(all_mean = mean(values), 
       A_mean = mean(values[value_type=="A"]), 
       value_count=sum(value_type == 'A')) 
+1

Soluzione semplice e piacevole! – drmariod

0

Si può fare questo con due passaggi di sintesi:

df %>% 
    group_by(id, tp, value_type) %>% 
    summarise(A_mean = mean(values)) %>% 
    summarise(all_mean = mean(values), 
      A_mean = sum(A_mean * (value_type == "A")), 
      value_count = sum(value_type == "A")) 

La prima sintesi calcola i mezzi per value_type e la seconda "somme" solo la media di value_type == "A"

Problemi correlati