Tablas unidimensionales

Estas son las más sencillas de todas. Sólo tomamos en consideración una variable. Por ejemplo, para hacer un recuento del número total de alumnos con $0,1,2,... 10$ insuficentes presentes en el data.frame resultados deberíamos teclear simplemente (siempre que resultados haya sido puesto en ruta de búsqueda con attach())
table(IN)
cuyo resultado es
table(IN)
IN

                  0 		  1 		 2 		3 		4 		  5 		  6 		 7 		 8 		 9 		 10 

1644 703 510 410 329 321 317 225 172 113 93

En muchos casos nos interesa agrupar los casos en intervalos. Para ello, podemos utilizar la función cut(). Por ejemplo, cut(IN,c(-0.01,2,5,8,10)) agrupará los registros de resultados en los intervalos definidos por los límites de clase $-0.01,2,5,8,10$ . Hay que hacer notar que cut(), por defecto, genera intervalos semiabiertos por abajo, de modo que para incluir en la primera clase los casos con $0$ insuficientes, hay que definir un límite de clase ligeramente inferior (en este caso, $-0.01$).

Ahora, para tabular el número de casos que contiene cada clase podríamos utilizar la función tapply() de la siguiente manera:
tapply(Alumno,cut(IN,c(-0.01,2,5,8,10)),length)
cuyo resultado es


(-0.01,2]		     (2,5]		     (5,8]		    (8,10] 

2858 1061 715 207
Veamos con más detalle cuál es la sintaxis de la función aplicada: se le dice a R que coja la variable Alumno y reparta los casos en los intervalos definidos por la función cut() según el número de IN que tenga cada uno. Una vez hecho este reparto, se aplica la función length() para ver cuál es la longitud del vector resultante, es decir, el número de casos. En este ejemplo no podemos utilizar la función sum() para obtener este último valor, como parecería más normal, porque la variable Alumno no es de tipo numérico sino que es un factor, de modo que no se le pueden aplicar operaciones de tipo algebráico.
Como vemos, la tabla resultante nos informa de que hay $2858$ alumnos/as con $0,1$ o $2$ insuficientes, $1061$ con $3,4$ o $5$,... Sin embargo, los datos no coinciden con la primera tabla, según la cual hay $2857, 1060,\ldots$ Esta diferencia se debe a que la función table() ignora por defecto los valores perdidos, pero tapply() los toma en consideración y los incorpora a cada una de las clases. Como en el data.frame resultados hay un caso, el $4838$, con NA's en casi todas las variables, la agrupación tabulada por tapply() da valores superiores en una unidad a los que corresponden eliminando los valores perdidos. Una manera de evitar esta situación, si así nos interesa, es eliminar previamente el caso problemático.
2007-02-12