La función table() en R: contar y hacer tablas de frecuencias
table() cuenta cuántas veces aparece cada valor. Es la función que usas para explorar variables categóricas y, probablemente, la más rentable de R en relación esfuerzo-resultado.
Ejemplo simple
colores <- c("rojo", "azul", "rojo", "verde", "rojo", "azul")
table(colores)
Te devuelve el recuento de cada uno. Con una columna de un data frame es igual:
table(iris$Species)
Cruzar dos variables
Pásale dos vectores y obtienes una tabla de doble entrada:
encuesta <- data.frame(
ciudad = c("Madrid", "Madrid", "Bilbao", "Bilbao", "Madrid", "Bilbao"),
transporte = c("metro", "coche", "coche", "bus", "metro", "coche")
)
table(encuesta$ciudad, encuesta$transporte)
En dos segundos ves la relación entre ciudad y medio de transporte. Esto en Excel sería una tabla dinámica.
Porcentajes en vez de recuentos
prop.table() convierte la tabla en proporciones:
recuento <- table(encuesta$ciudad, encuesta$transporte)
prop.table(recuento) # sobre el total
prop.table(recuento, margin = 1) # porcentaje por filas
prop.table(recuento, margin = 2) # porcentaje por columnas
El margin es lo mismo que en apply(): 1 son filas, 2 columnas.
Para verlo en porcentaje con menos decimales:
round(prop.table(recuento, margin = 1) * 100, 1)
Ejemplo algo más completo
Un detalle que despista: por defecto table() ignora los NA. Si quieres contarlos, hay que pedirlo:
datos <- c("sí", "no", NA, "sí", NA)
table(datos)
table(datos, useNA = "ifany")
Esa segunda versión es la que deberías usar al explorar datos nuevos → te enseña los huecos en lugar de esconderlos.
Y como table() devuelve un objeto ordenable, sacar el valor más frecuente es directo:
sort(table(colores), decreasing = TRUE)
Eso es justamente la base para calcular la moda, que R no trae de serie.