La mediana en R se calcula con median(x): devuelve el valor central de los datos ordenados, o el promedio de los dos centrales si la cantidad es par. No hace falta ordenar antes. Igual que mean, devuelve NA si falta algún dato, salvo que agregues na.rm = TRUE. Para cuartiles y otros percentiles, usa quantile(x, probs).
Sintaxis
median(x, na.rm = FALSE)
quantile(x, probs = c(0.25, 0.5, 0.75), na.rm = FALSE, type = 7)
tapply(valores, grupos, median) # mediana por grupo
quantile(x, 0.5) da el mismo número que median(x) con cualquier type que interpole, aunque con un nombre (50%) en el resultado.
Paso a paso
- Guarda los datos en un vector o toma la columna con
df$columna. - Llama a
median(x); agregana.rm = TRUEsi hay faltantes. - Compárala con
mean(x): si están lejos, hay asimetría o valores extremos. - Si necesitas cuartiles, usa
quantiley anota quétypeusaste.
Ejemplos resueltos
Ejemplo 1: precios de vivienda con un valor extremo
Seis departamentos, en miles de pesos:
precios <- c(1850, 2100, 1990, 2400, 9800, 2250)
median(precios)
mean(precios)
[1] 2175
[1] 3398.333
Ordenados quedan 1850, 1990, 2100, 2250, 2400 y 9800. Con 6 valores, los centrales son el tercero y el cuarto: (2100 + 2250) / 2 = 2175. El departamento de 9,800 sube el promedio a 3,398, una cifra mayor que 5 de los 6 precios. Por eso los reportes inmobiliarios suelen usar la mediana.
Ejemplo 2: cuartiles y el argumento type
quantile(precios, c(0.25, 0.5, 0.75))
quantile(precios, 0.75, type = 6)
25% 50% 75%
2017.5 2175.0 2362.5
75%
4250
R ofrece nueve métodos para calcular cuantiles. El de omisión, type = 7, es el mismo de CUARTIL.INC en Excel y de numpy.quantile. type = 6 es el que usan SPSS y Minitab, y con pocos datos da un tercer cuartil muy distinto: 4,250 contra 2,362.5. La mediana coincide en ambos. Si comparas resultados entre programas, revisa el método antes de pensar que hay un error. La teoría está en cuartiles.
Ejemplo 3: mediana por grupo
df <- data.frame(
area = c("Ventas", "Ventas", "Ventas", "Ventas", "Sistemas", "Sistemas", "Sistemas"),
sueldo = c(14500, 16200, 15800, 61000, 28000, 31500, 26000)
)
tapply(df$sueldo, df$area, median)
aggregate(sueldo ~ area, data = df, FUN = median)
Sistemas Ventas
28000 16000
area sueldo
1 Sistemas 28000
2 Ventas 16000
tapply devuelve un vector con nombres; aggregate devuelve un data frame, más cómodo para seguir trabajando o exportar. Los grupos salen en orden alfabético. Con dplyr: df |> group_by(area) |> summarise(mediana = median(sueldo)).
Errores comunes
- Resultado
NA. Falta al menos un dato. Usamedian(x, na.rm = TRUE)y reporta cuántos faltaban consum(is.na(x)). need numeric data. Pasaste un factor o un data frame entero. Para un data frame, aplica la función a cada columna consapply(df, median); para un factor, convierte conas.numeric(as.character(f)).- Números guardados como texto. Con un vector de texto y cantidad impar,
medianno avisa: ordena como texto, donde «100» va antes que «9», y devuelve una cadena que no es la mediana numérica. Convierte antes conas.numeric(gsub(",", "", x))si el CSV trae comas de miles. - Esperar un valor de los datos con cantidad par.
medianinterpola. Si necesitas un valor observado, usaquantile(x, 0.5, type = 1), que devuelve el menor de los dos centrales.
Comprueba el resultado con la calculadora de mediana o la de cuartiles. Si necesitas la diferencia conceptual con el promedio, lee mediana.
Fuentes
- R Core Team, documentación de median (paquete stats). Argumento na.rm. Consultado el 11 de noviembre de 2026.
- R Core Team, documentación de quantile (paquete stats). Los nueve tipos de cálculo; type = 7 por omisión. Consultado el 11 de noviembre de 2026.