使用tapply与FUN = function(x){}

时间:2016-04-26 11:21:22

标签: r tapply

在我的任务中,我想通过性别找到温度的平均值。我们可以通过tapply命令来做到这一点。我也不允许使用卑鄙的命令:

tapply(df$temperature,df$gender,FUN = function(x){sum(x)/length(df[,1])})

但它给了我错误的结果。它只是将结果除以2,而不是找到两性的平均值。 我该如何解决这个问题? 因为使用聚合函数一切正常:

  aggregate(df$temperature,by = list(df$gender),function(x){sum (x)/length(x)})

1 个答案:

答案 0 :(得分:2)

确认sum(x)/ length(x)是这里的方法:

创建模拟数据集:

set.seed(1)
d<-data.frame(temperature=rnorm(1000,500,20),
              gender=rep(c('M','F'),500))

使用自定义平均函数tapply按性别计算平均温度

> tapply(d$temperature, d$gender, function(x){ sum(x)/length(x)})
       F        M 
500.0884 499.4457 

确认这与基本mean()函数匹配:

> mean(d$temperature[d$gender=='F'])
[1] 500.0884
> mean(d$temperature[d$gender=='M'])
[1] 499.4457