Skip to content

[R-es] Asignar factor levels a nuevos datos

3 messages · Rubén Coca, Javier Marcuzzi, Víctor Granda García

#
Hola,
imaginemos que tengo este vector convertido a factor:

# -------
marcas1 <- factor(c('audi', 'opel', 'seat', 'toyota', 'opel'))

str(marcas1)

Factor w/ 4 levels "audi","opel",..: 1 2 3 4


¿Como puedo asignar la info de los niveles de marcas1 a un vector nuevo?
Por ejemplo:
marcas2 <- c('toyota', 'audi', 'audi', 'opel', 'audi')

Asumo que marcas2 no va a contener ninguna marca no presente en marcas1.

Muchas gracias por vuestra ayuda.
#
Estimado Rubén Coca

Creo que su pregunta puede tener dos diferencias, la primera es crear una
librería para compartir, pero creo que justo este caso no lo es, pero si lo
es avise y busco un código para que copie; la segunda diferencia es sobre
los datos, en otras palabras los datos son cargados en una librería y luego
le pregunto a la librería cuáles son los niveles que ella misma con los
algoritmos correspondientes calculó en forma automática, en este segundo
enfoque no hay que preocuparse por el trabajo con niveles, simplemente se
pregunta con algo semejante a librería$levels, lo que podría ser es guardar
en la memoria esta información para utilizarla posteriormente, por ejemplo
marcas <- librería$levels

Javier Rubén Marcuzzi

El vie., 22 jun. 2018 a las 13:50, Rubén Coca (<ruben.coca en gmail.com>)
escribió:

  
  
#
Buenas Ruben,

Echa un vistazo a parse_factor de la librería forcats. En tu ejemplo seria
algo así:

library(forcats)
parse_factor(marcas2, levels(marcas1))

Esto también lo puedes hacer directamente con factor sin necesidad de
instalar otro paquete como forcats

factor(marcas2, levels(marcas1))

Pero la ventaja de forcats y parse_factor es que te dará error si alguno de
los valores de marcas2 no es valido (no esta entre los niveles que has
establecido), lo que si estas usando esto dentro de una función añade una
capa extra de seguridad en el funcionamiento de tu funcion. ( sabrás que el
nuevo vector tiene algo que no deberia).

Espero que te sirva!!

El vie., 22 jun. 2018 18:50, Rubén Coca <ruben.coca en gmail.com> escribió: