View(mtcars)
library(graphics)
myData <- aggregate(mtcars$mpg,#AGREGAR VALOR MGP
by = list(cyl = mtcars$cyl, gears = mtcars$gear),# Y AGREGAR POR CYL Y GEAR
FUN = function(x) c(mean = mean(x), sd = sd(x),
n = length(x)))#DEVOLVER MEDIA,SD,NUM DE OBSEVACIÓN
myData <- do.call(data.frame, myData)# CONVERTIR A D.F
myData$se <- myData$x.sd / sqrt(myData$x.n)#CALCULO DE ERROR ESTANDAR
colnames(myData) <- c("cyl", "gears", "mean", "sd", "n", "se")#CAMBIAR NOMBRES
myData$names <- c(paste(myData$cyl, "cyl /",
myData$gears, " gear"))#AGREGAR COLUMNA DE DESCRIPCION
par(mar = c(5, 6, 4, 5) + 0.1)#TAMAÑO DE GRAFICA
plotTop <- max(myData$mean) +
myData[myData$mean == max(myData$mean), 6] * 3#VALOR MAXIMO
barCenters <- barplot(height = myData$mean,
names.arg = myData$names,
beside = true, las = 2,
ylim = c(0, plotTop),
cex.names = 0.75, xaxt = "n",
main = "Mileage by No. Cylinders and No. Gears",
ylab = "Miles per Gallon",
border = "black", axes = TRUE)
# Specify the groupings. We use srt = 45 for a
# 45 degree string rotation
text(x = barCenters, y = par("usr")[3] - 1, srt = 45,
adj = 1, labels = myData$names, xpd = TRUE)
segments(barCenters, myData$mean - myData$se * 2, barCenters,
myData$mean + myData$se * 2, lwd = 1.5)
arrows(barCenters, myData$mean - myData$se * 2, barCenters,
myData$mean + myData$se * 2, lwd = 1.5, angle = 90,
code = 3, length = 0.05)

tapply(myData$mean, list(myData$cyl, myData$gears),
function(x) c(x = x))
## 3 4 5
## 4 21.50 26.925 28.2
## 6 19.75 19.750 19.7
## 8 15.05 NA 15.4
tabbedMeans <- tapply(myData$mean, list(myData$cyl,
myData$gears),
function(x) c(x = x))
tabbedSE <- tapply(myData$se, list(myData$cyl,
myData$gears),
function(x) c(x = x))
barCenters <- barplot(height = tabbedMeans,
beside = TRUE, las = 1,
ylim = c(0, plotTop),
cex.names = 0.75,
main = "Mileage by No. Cylinders and No. Gears",
ylab = "Miles per Gallon",
xlab = "No. Gears",
border = "black", axes = TRUE,
legend.text = TRUE,
args.legend = list(title = "No. Cylinders",
x = "topright",
cex = .7))
segments(barCenters, tabbedMeans - tabbedSE * 2, barCenters,
tabbedMeans + tabbedSE * 2, lwd = 1.5)
arrows(barCenters, tabbedMeans - tabbedSE * 2, barCenters,
tabbedMeans + tabbedSE * 2, lwd = 1.5, angle = 90,
code = 3, length = 0.05)
