将 tapply 与 FUN = function(x){} 一起使用
usage of tapply with FUN = function(x){}
在我的任务中,我想按性别找到温度的平均值。我们可以通过 tapply 命令来做到这一点。我也不允许使用 mean 命令:
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)})
确认 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
在我的任务中,我想按性别找到温度的平均值。我们可以通过 tapply 命令来做到这一点。我也不允许使用 mean 命令:
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)})
确认 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