Использование 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
Другие вопросы по тегам