Suma y media de filas y columnas en R

Manipulación de datos con R Transformación de datos
colSums, rowSums, colMeans y rowMeans en R

Las funciones colSums y colMeans calculan la suma y la media de cada columna de un data frame o matriz mientras que rowSums y rowMeans calculan la suma y la media de cada una de las filas del objeto. Estas funciones son equivalentes a utilizar apply con FUN = sum o FUN = mean para filas o columnas, pero mucho más eficientes.

Suma de cada columna con colSums

La función colSums calcula la suma de cada una de las columnas de un data frame o matriz. En los siguientes bloques de código vamos a utilizar la siguiente matriz de ejemplo con cuatro columnas y nueve filas:

# Matriz de ejemplo
x <- matrix(50:85, ncol = 4)
x
      [,1] [,2] [,3] [,4]
 [1,]   50   59   68   77
 [2,]   51   60   69   78
 [3,]   52   61   70   79
 [4,]   53   62   71   80
 [5,]   54   63   72   81
 [6,]   55   64   73   82
 [7,]   56   65   74   83
 [8,]   57   66   75   84
 [9,]   58   67   76   85

Si quieres calcular la suma de cada una de las cuatro columnas, puedes introducir la matriz en la función colSums.

# Suma de cada columna
colSums(x)

# Equivalente a:
# apply(x, 2, sum)
486 567 648 729

Así, la suma de la primera columna es 486, la suma de la segunda es 567, la suma de la tercera es 648 y la suma de la cuarta columna es 729.

Si tu objeto contiene algún valor NA puedes establecer el argumento na.rm como TRUE. Considera la misma matriz pero con dos valores NA:

# Matriz de ejemplo
x <- matrix(50:85, ncol = 4)
x[3, 2:3] <- NA
x
      [,1] [,2] [,3] [,4]
 [1,]   50   59   68   77
 [2,]   51   60   69   78
 [3,]   52   NA   NA   79
 [4,]   53   62   71   80
 [5,]   54   63   72   81
 [6,]   55   64   73   82
 [7,]   56   65   74   83
 [8,]   57   66   75   84
 [9,]   58   67   76   85

Si intentas calcular las sumas obtendrás dos valores NA en las columnas que contienen esos valores que faltan.

colSums(x)
486  NA  NA 729

Para evitar este problema y calcular la suma de los valores disponibles tendrás que establecer na.rm = TRUE como en el ejemplo siguiente.

# Suma de cada columna eliminando valores NA
colSums(x, na.rm = TRUE)

# Equivalente a:
# apply(x, 2, sum, na.rm = TRUE)
486 506 578 729

Media de cada columna con colMeans

La función colMeans calcula la media de cada una de las columnas de un data frame o matriz.

# Matriz de ejemplo
x <- matrix(50:85, ncol = 4)

# Media de cada columna
colMeans(x)

# Equivalente a:
# apply(x, 2, mean)
54 63 72 81

La salida significa que la media de los valores de la primera columna es 54, la media de la segunda columna es 63 y así sucesivamente. Si tus datos contienen algún valor NA recuerda establecer na.rm = TRUE.

Suma de cada fila con rowSums

La función rowSums calcula la suma de cada una de las filas de un data frame o matriz. Sólo tienes que introducir tu objeto en la función.

# Matriz de ejemplo
x <- matrix(50:85, ncol = 4)

# Suma de cada fila
rowSums(x)

# Equivalente a:
# apply(x, 1, sum)
254 258 262 266 270 274 278 282 286

En el ejemplo anterior, la suma de los valores de la primera fila es 254, la suma de la segunda fila es 258 y así sucesivamente. Si los datos contienen valores omitidos, puedes establecer el argumento na.rm de la función como TRUE para ignorarlos.

Media de cada fila con rowMeans

La función rowMeans calcula la media de cada una de las filas de un data frame o matriz. Tendrás que pasar tu matriz o data frame como entrada de la función para obtener las medias de cada una de las filas.

# Matriz de ejemplo
x <- matrix(50:85, ncol = 4)

# Media de cada fila
rowMeans(x)

# Equivalente a:
# apply(x, 1, mean)
63.5 64.5 65.5 66.5 67.5 68.5 69.5 70.5 71.5

La media de los valores de la primera fila es 63.5, la media de los valores de la segunda fila es 64.5 y así sucesivamente.