Promedio de columnas y filas en R

Por el equipo de promedio.net · Actualizado el

En R, el promedio de una columna de un data frame se calcula con mean(df$columna). Para el promedio de varias columnas a la vez usa colMeans(df[, columnas]) y para el promedio de cada fila, rowMeans(df[, columnas]). Las dos funciones exigen columnas numéricas y aceptan na.rm = TRUE para ignorar los faltantes.

Sintaxis

mean(df$col)                                   # una columna
colMeans(df[, c("a", "b")], na.rm = TRUE)      # promedio de cada columna
rowMeans(df[, c("a", "b")], na.rm = TRUE)      # promedio de cada fila
sapply(df[sapply(df, is.numeric)], mean)       # todas las columnas numéricas
apply(m, 1, mean)                              # filas de una matriz (2 = columnas)

colMeans y rowMeans están escritas en C y son mucho más rápidas que apply con tablas grandes, además de más legibles.

Paso a paso

  1. Revisa las columnas con str(df): las que vas a promediar deben ser num o int.
  2. Selecciona solo esas columnas, por nombre (c("p1", "p2")) o por posición (2:4).
  3. Usa colMeans para un promedio por columna o rowMeans para uno por fila.
  4. Agrega na.rm = TRUE si hay faltantes y decide si eso es justo para cada fila.
  5. Guarda el resultado como columna nueva con df$promedio <- ....

Datos de ejemplo:

cal <- data.frame(
  alumno = c("Ana", "Luis", "Sofía", "Diego"),
  p1 = c(8.5, 6.0, 9.0, 7.5),
  p2 = c(9.0, 7.0, 8.5, NA),
  p3 = c(7.5, 8.0, 10.0, 7.0)
)

Ejemplos resueltos

Ejemplo 1: promedio de cada parcial

colMeans(cal[, 2:4])
colMeans(cal[, 2:4], na.rm = TRUE)
   p1    p2    p3 
7.750    NA 8.125 
      p1       p2       p3 
7.750000 8.166667 8.125000 

Diego no presentó el segundo parcial, así que sin na.rm el promedio de p2 es NA. Con na.rm = TRUE, p2 se calcula con los 3 alumnos que sí lo presentaron: 24.5 / 3 = 8.17. R muestra todos los valores del vector con la misma cantidad de decimales, por eso aparecen 7.750000 y 8.125000.

Ejemplo 2: promedio de cada alumno como columna nueva

cal$promedio <- round(rowMeans(cal[, c("p1", "p2", "p3")], na.rm = TRUE), 2)
cal
  alumno  p1  p2   p3 promedio
1    Ana 8.5 9.0  7.5     8.33
2   Luis 6.0 7.0  8.0     7.00
3  Sofía 9.0 8.5 10.0     9.17
4  Diego 7.5  NA  7.0     7.25

El promedio de Diego (7.25) usa solo sus dos parciales. Si el reglamento dice que un parcial no presentado vale 0, reemplaza antes los NA: cal$p2[is.na(cal$p2)] <- 0, y su promedio bajaría a 4.83. Seleccionar las columnas por nombre evita que la nueva columna promedio entre en cálculos posteriores por accidente.

Ejemplo 3: todas las columnas numéricas sin escribir sus nombres

Con tablas anchas no conviene listar columnas. Filtra las numéricas con sapply(df, is.numeric):

num <- sapply(cal, is.numeric)
round(sapply(cal[num], mean, na.rm = TRUE), 2)
      p1       p2       p3 promedio 
    7.75     8.17     8.12     7.94 

Ahora también aparece la columna promedio creada en el ejemplo 2, porque es numérica: revisa siempre qué columnas quedaron. Fíjate además en p3: 8.125 se redondea a 8.12, porque R sigue la norma IEC 60559 y, para un 5 final exacto, redondea al par. En dplyr, lo equivalente es summarise(across(where(is.numeric), \(x) mean(x, na.rm = TRUE))).

Errores comunes

El mismo cálculo en pandas está en promedio de una columna en pandas. Las reglas escolares de redondeo y de calificaciones faltantes se explican en cómo sacar el promedio de calificaciones.

Fuentes

  1. R Core Team, documentación de colSums, rowSums, colMeans y rowMeans (paquete base). Argumento na.rm y requisito de datos numéricos. Consultado el 11 de noviembre de 2026.