reordena.factor.fnc

Copia, Pega y Adapta

datos = reordena.factor.fnc(datos, que.factor='tratamiento',

niveles=c('control','A','B') )

datos = reordena.factor.fnc(datos, que.factor='tr.r',

niveles=c('Q1','Q4'), hacer.NA=T)

OBJETIVO

Permite cambiar el orden de los niveles de un factor desde su ordenamiento por defecto de carácter alfabético a un nuevo orden definido por el usuario. Otra de las opciones de gran utilidad de esta función esta en eliminar (haciendo NA) aquellos niveles de un factor que el usuario desee. Asimismo permite cambiar la clase de pertenencia de una variable (numérica, entera o carácter) a la clase factor.

Reordenando niveles

Partiremos de la base de datos iris de la librería MASS la cual contiene 4 medidas realizadas en 150 plantas pertenecientes a 3 especies medidas con la variable Species.

Si pedimos la distribución de frecuencias de la variable Species veremos que los niveles están ordenados alfabéticamente. Vamos a reordenar dichos niveles de forma diferente (no alfabética).

frecuencias.fnc(iris, variables='Species')

iris= reordena.factor.fnc(iris, que.factor='Species',

niveles=c('virginica','versicolor','setosa') )

frecuencias de Species (sin reordenar)

Species reordenada

Ahora el factor Species presenta el orden no alfabético deseado. Esto es especialmente útil cuando los niveles que aparecen en una gráfica o tabla no tiene el orden deseado por el usuario. Si tenemos 3 grupos definidos por niveles alto, medio y bajo los niveles se ordenaran alto, bajo y medio lo cual obviamente no sigue el ordenamiento real de dichos niveles. La solución por tanto estaría en reordenarlos siguiendo el procedimiento descrito.

Eliminando niveles

En muchas otras ocasiones lo que el usuario desea es impedir que ciertos niveles de un factor entren en un determinado análisis. Podemos pensar que la mejor solución para este objetivo sería filtrar los datos mediante un subset y trabajar con la base de datos resultante. Veamos que ocurriría si actuásemos así. Vamos a seleccionar a modo de ejemplo los niveles versicolor y virginica (dejaremos fuera el nivel setosa)

iris2= subset(iris, Species != 'setosa')

Pedimos ahora la distribución de frecuencias de Species en la nueva base de datos filtrada iris2.

frecuencias.fnc(iris2, variables='Species', grafica=T)

Continúa apareciendo el nivel no deseado setosa

Puedes ver como el nivel setosa sigue apareciendo (con valor 0) tanto en la distribución de frecuencias de la variable Species como en la gŕafica de barras de dichas frecuencias. Obviamente cualquier análisis que realicemos con esta variable contemplará dicho nivel aunque con valor cero, generando graves problemas de estimación si nos encontrásemos por ejemplo en un contexto de análisis discriminante, Anovas, etc. La solución consiste en "reordenar" el factor eliminando los niveles no deseados del argumento niveles.

iris2=reordena.factor.fnc(iris, que.factor='Species',

niveles=c('virginica','versicolor' ) )

Esta instrucción te genera un error porque la función detecta que los niveles declarados están incompletos (observa la figura inferior). Lo solucionamos incluyendo la propuesta que el propio mensaje de error te da de incluir el argumento hacer.NA=T

iris2=reordena.factor.fnc(iris, que.factor='Species',

niveles=c('virginica','versicolor') , hacer.NA=T)

error al reordenar menos niveles de los reales.

al incluir hacer.NA=T reordena adecuadamente

Si solicitamos ahora la distribución de frecuencias anterior veremos que el nivel setosa ha desaparecido completamente del factor Species. Ahora podemos utilizar esa variable como factor de agrupación en un Análisis discriminante o como factor intergrupo en un Anova con la garantía de que solo intervendrán los niveles deseados.

frecuencias.fnc(iris2, variables='Species', grafica=T)

Desde numérica o carácter a factor

En ocasiones con bases de datos importadas las variables en origen categóricas vienen en versión numérica (por ejemplo sexo: hombre 1 mujer 2) en otras la variable siendo categórica con etiquetas alfanuméricas está en versión caracter y no factor como sería adecuado para su utilización con factor intergrupo en un Anova o variable de agrupación en un análisis discriminante. La función reordena.factor.fnc puede tambien modificar la clase de una variable a la nueva condición de factor.

Seguidamente crearemos una pequeña base de datos con 10 valores donde simularemos dos variables: sexo en su versión numérica (1 y 2) y nota tipificada).

prueba= data.frame(sexo=rep(c(1,2), each=5), nota =rnorm(10))

prueba

sexo x

1 1 0.3481685

2 1 -0.5842693

3 1 -0.1889138

4 1 0.7612768

5 1 -0.1615658

6 2 0.3843339

7 2 -2.6769726

8 2 -1.1109847

9 2 1.2623528

10 2 1.1588194


nombres.var(prueba)

nombre numero tipo

1 sexo 1 numeric

2 x 2 numeric

Vamos a transformar el tipo (clase) de la variable sexo (numérica) a su versión factor.

prueba=reordena.factor.fnc(prueba, que.factor='sexo', niveles=c(1,2))