tipo - ordenar factores en r
Renombrar un nivel de un factor en R (2)
Estoy intentando cambiar el nombre del nivel A
de la column1
en el df
marco de datos en R. Mi enfoque actual es este:
levels(df[!is.na(df$column1) & df$column1 == ''A'',]) <- ''B''
que no arroja ningún error o advertencia pero es completamente ineficaz.
B
no es un nivel ya existente (lo que de prueba y error llegué a sospechar que era importante), por lo que lo siguiente, mi primer intento, tampoco funcionó
df[!is.na(df$column1) & df$column1 == ''A'', ''column1''] <- ''B''
¿Alguien podría guiarme hacia el enfoque correcto?
Iba a sugerir
levels(df$column1)[levels(df$column1)=="A"] <- "B"
o use la función de utilidad plyr::revalue
:
library("plyr")
df <- transform(df,
column1=revalue(column1,c("A"="B")))
transform()
es un poco de azúcar que no es necesario; puede usar df$column1 <- revalue(df$column1(...))
Para completar, car::recode
también funciona, aunque me parece un poco extraño que plyr::revalue
(porque la recodificación se especifica como una cadena entre comillas).
car::recode(df$column1,"''A''=''B''")
Una forma sería simplemente cambiar la etiqueta del nivel. Primero, algunos datos de prueba.
df <- data.frame(column1=c("A","B","C","A","B"))
y ahora reemplazamos "A" con "X"
levels(df$column1) <- gsub("A","X", levels(df$column1))
y podemos ver que ha cambiado
column1
1 X
2 B
3 C
4 X
5 B
Es posible que deba tener cuidado con gsub()
ya que acepta una expresión regular. Un reemplazo más específico sería
gsub("^A$","X", levels(df$column1))
para coincidir exactamente con "A" y no con "CAB" u otra cosa con un capital A.