Question
This question already has answers here :
[Aggregate / summarize multiple variables per group (e.g. sum, mean)](/questions/9723208/aggregate-summarize-multiple-variables-per-group-e- g-sum-mean) (10 answers)
Calculate the mean by group (10 answers)
Closed 3 years ago.
I have a data.frame
and I need to calculate the mean per group (i.e. per
Month
, below).
Name Month Rate1 Rate2
Aira 1 12 23
Aira 2 18 73
Aira 3 19 45
Ben 1 53 19
Ben 2 22 87
Ben 3 19 45
Cat 1 22 87
Cat 2 67 43
Cat 3 45 32
My desired output is like below, where the values for Rate1
and Rate2
are
the group means. Please disregard the value, I have made it up for the
example.
Name Rate1 Rate2
Aira 23.21 12.2
Ben 45.23 43.9
Cat 33.22 32.2
Answer
This type of operation is exactly what aggregate
was designed for:
d <- read.table(text=
'Name Month Rate1 Rate2
Aira 1 12 23
Aira 2 18 73
Aira 3 19 45
Ben 1 53 19
Ben 2 22 87
Ben 3 19 45
Cat 1 22 87
Cat 2 67 43
Cat 3 45 32', header=TRUE)
aggregate(d[, 3:4], list(d$Name), mean)
Group.1 Rate1 Rate2
1 Aira 16.33333 47.00000
2 Ben 31.33333 50.33333
3 Cat 44.66667 54.00000
Here we aggregate columns 3 and 4 of data.frame d
, grouping by d$Name
, and
applying the mean
function.
Or, using a formula interface:
aggregate(. ~ Name, d[-2], mean)