Использование tapply с FUN = function(x){}
В моей задаче я хочу найти среднее значение температуры по полу. Мы можем сделать это с помощью команды 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 ответ
Решение
Подтверждение того, что сумма (x)/ длина (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
Подтверждая, что это соответствует функции base mean():
> mean(d$temperature[d$gender=='F'])
[1] 500.0884
> mean(d$temperature[d$gender=='M'])
[1] 499.4457