2016-06-29 3 views
5

dplyrと少し苦労しています。私は2つのことを一つにしたいと思っています。dplyrの要約機能内でフィルタリング

私は、値の平均を計算すると同時に、他の列に特定の値を持つ値の平均を計算したいと思います。

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

のでA_mean列はvaluesvalue_count == 'A'の平均値を計算する必要があります。

私は通常、2つのコマンドを別々に行い、後で結果をマージしますが、もっと便利な方法があると思います。

ありがとうございます。

答えて

8

私たちは、次の2つのサマリー段階でこれを行うことができます

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

すてきで簡単な解決策! – drmariod

0

を試すことができます。

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

最初の要約はvalue_type == "A"

の唯一の平均 value_typeあたり手段と第2の「合計」を算出し、
関連する問題