variable transformar studio recodificar how categorizar categoricas r

transformar - show variable in r



Recodificación de variables con R (5)

Recodificar variables en R, parece ser mi mayor dolor de cabeza. ¿Qué funciones, paquetes y procesos utiliza para garantizar el mejor resultado?

He encontrado muy pocos ejemplos útiles en Internet que dan una solución de talla única para la recodificación y estoy interesado en ver qué están usando ustedes y las chicas.

Nota: Este puede ser un tema wiki de la comunidad.


Cuando desee recodificar niveles de un factor, los forcats pueden ser útiles. Puedes leer un capítulo de R para Data Science para un extenso tutorial, pero aquí está lo esencial.

library(tidyverse) library(forcats) gss_cat %>% mutate(partyid = fct_recode(partyid, "Republican, strong" = "Strong republican", "Republican, weak" = "Not str republican", "Independent, near rep" = "Ind,near rep", "Independent, near dem" = "Ind,near dem", "Democrat, weak" = "Not str democrat", "Democrat, strong" = "Strong democrat", "Other" = "No answer", "Other" = "Don''t know", "Other" = "Other party" )) %>% count(partyid) #> # A tibble: 8 × 2 #> partyid n #> <fctr> <int> #> 1 Other 548 #> 2 Republican, strong 2314 #> 3 Republican, weak 3032 #> 4 Independent, near rep 1791 #> 5 Independent 4119 #> 6 Independent, near dem 2499 #> # ... with 2 more rows

Incluso puede dejar que R decida qué categorías (niveles de factor) se fusionan.

A veces, solo desea agrupar a todos los grupos pequeños para simplificar el trazado o la tabla. Ese es el trabajo de fct_lump (). [...] El comportamiento predeterminado es agrupar progresivamente a los grupos más pequeños, asegurando que el agregado sigue siendo el grupo más pequeño.

gss_cat %>% mutate(relig = fct_lump(relig, n = 10)) %>% count(relig, sort = TRUE) %>% print(n = Inf) #> # A tibble: 2 × 2 #> relig n #> <fctr> <int> #> 1 Protestant 10846 #> 2 Other 10637


Descubrí que a veces puede ser más fácil convertir factores no numéricos en caracteres antes de intentar cambiarlos, por ejemplo.

df <- data.frame(example=letters[1:26]) example <- as.character(df$example) example[example %in% letters[1:20]] <- "a" example[example %in% letters[21:26]] <- "b"

Además, al importar datos, puede ser útil asegurarse de que los números sean realmente numéricos antes de intentar convertir:

df <- data.frame(example=1:100) example <- as.numeric(df$example) example[example < 20] <- 1 example[example >= 20 & example < 80] <- 2 example[example >= 80] <- 3


Encontré mapvalues del paquete plyr muy útil. El paquete también contiene la función de revalue que es similar a car:::recode .

El siguiente ejemplo será "recodificar"

> mapvalues(letters, from = c("r", "o", "m", "a", "n"), to = c("R", "O", "M", "A", "N")) [1] "A" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "M" "N" "O" "p" "q" "R" "s" "t" "u" "v" "w" "x" "y" "z"


La recodificación puede significar muchas cosas, y es fundamentalmente complicada.

El cambio de los niveles de un factor se puede hacer usando la función de levels :

> #change the levels of a factor > levels(veteran$celltype) <- c("s","sc","a","l")

Transformar una variable continua simplemente implica la aplicación de una función vectorizada:

mtcars $ mpg.log <- log (mtcars $ mpg)

Para agrupar datos continuos, consulte cut y cut2 (en el paquete hmisc). Por ejemplo:

> #make 4 groups with equal sample sizes > mtcars[[''mpg.tr'']] <- cut2(mtcars[[''mpg'']], g=4) > #make 4 groups with equal bin width > mtcars[[''mpg.tr2'']] <- cut(mtcars[[''mpg'']],4, include.lowest=TRUE)

Para recodificar variables continuas o factoriales en una variable categórica, hay recode en el paquete car y recode.variables en el paquete Deducer

> mtcars[c("mpg.tr2")] <- recode.variables(mtcars[c("mpg")] , "Lo:14 -> ''low'';14:24 -> ''mid'';else -> ''high'';")

Si está buscando una GUI, Deducer implementa la recodificación con los cuadros de diálogo Transformar y Recodificar:

http://www.deducer.org/pmwiki/pmwiki.php?n=Main.TransformVariables

http://www.deducer.org/pmwiki/pmwiki.php?n=Main.RecodeVariables


Me parece muy conveniente cuando se deben transformar varios valores (es como hacer recodificaciones en Stata):

# load package and gen some data require(car) x <- 1:10 # do the recoding x ## [1] 1 2 3 4 5 6 7 8 9 10 recode(x,"10=1; 9=2; 1:4=-99") ## [1] -99 -99 -99 -99 5 6 7 8 2 1