Search code examples
raggregate

Mean per group in a data.frame


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

Solution

  • 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)