2016-07-26 79 views
2

我正嘗試使用dplyr將聚合列添加到數據幀。這裏是什麼,我心裏有一個例子:使用dplyr將聚合列添加到數據幀

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

是否有:

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

我組的數據幀MYDATA按性別進行聚合計算性別發現平均體重前在與上述相同的步驟中將平均權重列添加到原始數據框的任何方法?在SQL中,我會使用下面的代碼行實現這一點:

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

我意識到這是一個非常基本的問題,但我是新來的R和我似乎無法在別處找到了答案。

+0

用mutate替換總結。 –

回答

1

在情況下,它是感興趣的,這可以在基礎R使用ave函數完成:

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

第一個參數是所述變量該函數將被應用,第二個是分組變量,而第三個是將由組應用的函數。

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代替summarise

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