2016-07-26 22 views
2

dplyrを使用してデータフレームに集約カラムを追加しようとしています。ここで私が考えているものの例である:dplyrを使用してデータフレームに集約カラムを追加する

gender <- c("male", "female", "male") 
age <- c(25, 30, 56) 
weight <- c(160, 110, 220) 
mydata <- data.frame(gender, age, weight) 

Iグループのデータフレーム男女別MYDATAは、男女別の平均体重を見つけるために、集約された計算を行う前に:

library(dplyr) 
mydata <- group_by(mydata, gender) 
mydata2 <- summarise(mydata, wt=mean(weight)) 

があります上記と同じステップで元のデータフレームに平均加重の列を追加する方法はありますか?

SELECT gender, age, weight, avg(weight) as avg_wt FROM mydata GROUP BY gender 

私は、これは非常に基本的な質問で実現するが、私はRに新しいですし、私はどこにでも答えを見つけるように見えることはできません:SQLでは、私は次のコード行を使用して、これを達成するであろう。代わりsummarise

+0

要約をmutateと置き換えます。 –

答えて

1

それが重要である場合、これはave関数を用いて基地Rで達成することができる。

mydata$avg_wt <- ave(mydata$weight, mydata$gender, FUN=mean) 

最初の引数は変数であります2番目のグループ化変数、3番目の変数はグループによって適用される関数です。

mydata 
    gender age weight avg_wt 
1 male 25 160 190 
2 female 30 110 110 
3 male 56 220 190 

FUN引数のデフォルト値は「平均」であるので、

mydata$avg_wt <- ave(mydata$weight, mydata$gender) 

に上記のコードを短縮することができる私はその指標として上記の回答で、この引数を追加したことに注意してください、その名前にもかかわらず、aveはグループの他の統計量(ユーザー記述関数を含む)を計算することができます。

+0

@DavidArenburgありがとうございます。あなたが正しいです。その名前にもかかわらず、他の関数を計算するために使用できることを思い出させるために、答えに追加するのが好きです。私は私の答えでこれを書き留めます。 – lmo

4

使用mutate

mydata %>% group_by(gender) %>% mutate(wt = mean(weight)) 


#Source: local data frame [3 x 4] 
#Groups: gender [2] 
# 
# gender age weight wt 
# (fctr) (dbl) (dbl) (dbl) 
#1 male 25 160 190 
#2 female 30 110 110 
#3 male 56 220 190