2016-07-26 88 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