2016-06-29 7 views
5

ich ein wenig mit dplyr habe Schwierigkeiten, weil ich zwei Dinge an einem tun wollen und sich fragen, ob es möglich ist.Filterung innerhalb der summarise Funktion von dplyr

Ich möchte für die Werte den Mittelwert der Werte und zugleich den Mittelwert berechnen, die einen bestimmten Wert in einer anderen Spalte.

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') 
) 

So ist die A_mean Spalte sollte den Mittelwert von values wo value_count == 'A' berechnen.

ich normalerweise tun würde zwei getrennte Befehle und die Ergebnisse später fusionieren, aber ich denke, es gibt eine praktische Möglichkeit ist und ich es einfach nicht bekommen.

Vielen Dank im Voraus.

Antwort

8

Wir versuchen

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

Nizza und einfache Lösung! – drmariod

0

Sie können dies mit zwei Zusammenfassung Schritten:

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")) 

Die erste Zusammenfassung berechnet die Mittel pro value_type und die zweite „Summen“ nur der Mittelwert von value_type == "A"