要扩展@detroyejr的答案,请考虑tapply
它按各种因子对向量进行切片并应用诸如mean
每个子集返回一个命名向量或矩阵。
但是,为了与原始整体平均条形图对齐,请转置tapply
结果与t()
男/女用rownames1-12年级为colnames。然后使用beside=TRUE
对于未堆叠的酒吧。
gender.mean <- t(tapply(learner$literacy_total,
list(learner$learner_grade, learner$gender), mean))
barplot(gender.mean, col=c("darkblue","red"), beside=TRUE, legend=rownames(gender.mean))
用随机数据进行演示:
set.seed(888)
learner <- data.frame(
learner_grade = replicate(50, sample(seq(12), 1, replace=TRUE)),
gender = replicate(50, sample(c("MALE", "FEMALE"), 1, replace=TRUE)),
literacy_total = abs(rnorm(50)*100)
)
gender.mean <- t(tapply(learner$literacy_total,
list(learner$learner_grade, learner$gender), mean))
barplot(gender.mean, col=c("darkblue","red"), beside=TRUE, legend=rownames(gender.mean))