Group.1
Group.2
Salary
Age
1
Cook
Dinner
1600
22
2
Manager
Dinner
2000
41
3
Server
Dinner
1500
25
4
Cook
Lunch
1000
19
5
Manager
Lunch
2200
32
6
Server
Lunch
1200
24
>data <- table
>
>second <- function(x) {
    if (length(x) == 1)
        return(x)
    return(sort(x, decreasing = TRUE)[2])}
>
>agg <- aggregate(data,
                 by = list(data$Role, data$Shift),
                 FUN = second)
>
>agg$Name <- agg$Role <- agg$Shift <- NULL
>agg
  Group.1 Group.2 Salary Age
1    Cook  Dinner   1600  22
2 Manager  Dinner   2000  41
3  Server  Dinner   1500  25
4    Cook   Lunch   1000  19
5 Manager   Lunch   2200  32
6  Server   Lunch   1200  24
Total time:2.38s
Time on R server:2.31s
Time evaluating code:2.17s
Bytes sent:1,767
Bytes received:2,842