tapply splits a vector by group labels, applies a function to each group, and returns one result per group.

Program

Play the script to add a bonus, split scores by group, and average each group.

grouped_mean.R
group <- c("A", "A", "B", "B")
values <- c(3, 5, 7, 9)
bonus <- 
adjusted <- values + bonus
means <- tapply(adjusted, group, mean)
label <- paste(names(means), means, collapse = "; ")
cat(label, "\n", sep = "")
group <- c("A", "A", "B", "B")
values <- c(3, 5, 7, 9)
bonus <- 
adjusted <- values + bonus
means <- tapply(adjusted, group, mean)
label <- paste(names(means), means, collapse = "; ")
cat(label, "\n", sep = "")
group <- c("A", "A", "B", "B")
values <- c(3, 5, 7, 9)
bonus <- 
adjusted <- values + bonus
means <- tapply(adjusted, group, mean)
label <- paste(names(means), means, collapse = "; ")
cat(label, "\n", sep = "")
tapply `tapply(values, group, mean)` computes a summary inside each group.
vector recycling `values + bonus` adds one scalar to every element.
names `names(means)` returns the group labels carried by the summary.