Существует много способов расчета сгруппированных средних. Тот, который вы пытались сделать, это через aggregate
. Это работает следующим образом:
aggregate(weight ~ species, data = df, mean)
species weight
1 Korgi 18.8
2 XYZ 17.9
Если вы хотите вычислить среднее значение только для определенного диапазона строк, вам необходимо задать подкадр данных или обе переменные в этом диапазоне:
aggregate(weight ~ species, data = df[1:10,], mean)
# or:
aggregate(weight[1:10] ~ species[1:10], data = df, mean)
species[1:10] weight[1:10]
1 Korgi 18.8
Связанная функция - tapply
, которая применяет функцию, в данном случае mean
, к таблице:
tapply(df$weight, df$species, mean)
Korgi XYZ
18.8 17.9
Иллюстративные данные:
set.seed(123)
df <- data.frame(species = c(rep("Korgi", 10), rep("XYZ", 10)),
weight = sample(10:25, 20, replace = T))