2016-06-29 19 views
5

Trochę borykam się z dplyr, ponieważ chcę zrobić dwie rzeczy na jednym i zastanawiam się, czy jest to możliwe.filtrowanie w ramach funkcji podsumowania dplyr

Chcę obliczyć średnią wartości i jednocześnie średnią dla wartości, które mają określoną wartość w innej kolumnie.

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

Więc kolumna A_mean należy obliczyć średnią z values gdzie value_count == 'A'.

Zwykle robię dwa oddzielne polecenia i łączę wyniki później, ale myślę, że jest bardziej przydatny sposób i po prostu go nie dostaję.

Z góry dziękuję.

Odpowiedz

8

Możemy spróbować

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

Ładne i łatwe rozwiązanie! – drmariod

0

Można to zrobić z dwóch etapów Podsumowanie:

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

Pierwsze podsumowanie oblicza środki za value_type i drugie „sum” tylko średnią value_type == "A"

Powiązane problemy