2012-03-07 19 views
39

Tengo una columna de datos que es un factor con niveles A, B y C, estoy interesado en combinar dos de estos niveles en un factor, por lo que se convertiría en A y B, con B = B y C, o tal vez una nueva variable A y D, con D = B y C. Puedo encontrar muchas formas de hacerlo al pasar por la columna con las declaraciones if, pero siento que debería haber un enfoque más elegante y me preguntaba si alguien podría señalarme en la dirección correcta.Agrupando 2 niveles de un factor en R

+3

más recientes, mejor respuesta: http://stackoverflow.com/questions/19410108/cleaning-up-factor- levels-collapsing-multiple-levels-labels –

Respuesta

70

Utilice levels(x) <- ... para especificar nuevos niveles y combinar algunos niveles anteriores. Por ejemplo:

f <- factor(LETTERS[c(1:3, 3:1)]) 
f 
[1] A B C C B A 
Levels: A B C 

Ahora se combinan "A" y "B" en un solo nivel:

levels(f) <- c("A", "A", "C") 
f 
[1] A A C C A A 
Levels: A C 
+0

¡Tan simple como podría haber esperado, gracias! – asjohnson

+0

Esto es útil, gracias a los dos. – Rhubarb

+0

¿Hay alguna manera de hacerlo en dplyr? – Hatshepsut

9

Si está utilizando dplyr tuberías puede utilizar el paquete forcats.

library(forcats) 
f %>% fct_collapse(A = c("A","B")) 

#[1] A A C C A A 
#Levels: A C 
2

La biblioteca de rockchalk puede combinar niveles. Creo que es genial, si quieres combinar B y C juntos en un factor de hacer esto:

library(rockchalk) 
combineLevels(mydf$facVar,levs = c("B", "C"), newLabel = c("BandC")) 
Cuestiones relacionadas