miércoles, 8 de julio de 2015

Crear un factor de R, a partir de enteros

[Lenguajes: R]

Problema

En R, los factores son como vectores que aceptan valores descriptivos. Por ejemplo, en algún tipo de experimento se pudiera caracterizar el nivel de energía de una batería, con cuatro niveles: vacio, bajo, normal, lleno. Entonces, para 5 sitios o experimentos diferentes, se podrían identificar esos niveles, en esos términos, como sigue:

lleno, lleno, normal, vacio, bajo

Normalmente, en bases de datos o en otras fuentes de información, el manejo típico de estos datos es mediante índices enteros arbitrarios asociados con las categorías o niveles, en este caso. Si suponemos que se asignaran, para el caso del ejemplo, en orden, como sigue: 1=vacio, 2=bajo, 3=normal, 4=lleno, entonces, los 5 experimentos podrían codificarse así:

4, 4, 3, 1, 2

Sucede, muchas veces, que se cuenta con la lista codificada de enteros, y con la tabla o catálogo de los índices, pero no con el factor ya construído. ¿Cómo se puede reconstruir, entonces, un factor de R, a partir de esa información?

Solución

Para resolver este problema simularemos una vector de 20 enteros que represente los experimentos, cada uno de los cuales podrá tener cinco diferentes valores: nivelUno, nivelDos, nivelTres, nivelCuatro, nivelCinco.

# Hagamos la lista simulada:
set.seed(18)
ii <- sample(1:5, 20, replace=T)
ii
##  [1] 5 4 5 1 1 3 2 3 2 2 4 4 1 2 5 1 3 1 5 1

El primer paso consiste en hacer un factor, a partir de la secuencia previa, en el que los niveles o categorías sean exactamente los números del 1 al 5.

fii <- factor(ii, levels=1:5) # necesario indicar los niveles numericos
fii
##  [1] 5 4 5 1 1 3 2 3 2 2 4 4 1 2 5 1 3 1 5 1
## Levels: 1 2 3 4 5

Ahora simplemente, hay que vestir el factor ya creado con las etiquetas correspondientes a los índices:

levels(fii) <- c("nivelUno", "nivelDos", "nivelTres", "nivelCuatro", "nivelCinco")
fii
##  [1] nivelCinco  nivelCuatro nivelCinco  nivelUno    nivelUno   
##  [6] nivelTres   nivelDos    nivelTres   nivelDos    nivelDos   
## [11] nivelCuatro nivelCuatro nivelUno    nivelDos    nivelCinco 
## [16] nivelUno    nivelTres   nivelUno    nivelCinco  nivelUno   
## Levels: nivelUno nivelDos nivelTres nivelCuatro nivelCinco

Con esto se concluye el ejemplo.


Si quieres ver este mismo post en mis publicaciones de Rpubs:


No hay comentarios.:

Publicar un comentario