22/07/25
Abstract
La teoría mencionada puede revisarse en el capítulo 1 de mis notas de clase que aparecen en el siguiente documento: 1.1. Estadística básica. Otros documentos de posible interés se pueden ver en Rpubs :: toc.
library(dplyr)
library(plyr)
library(forcats)
library(car)
Recuerde que el data frame (básicamente una tabla) es en realidad solo un tipo específico de otra estructura de datos (la lista). Actualmente, es el formato de entrada de nuestros datos más frecuente para los análisis estadísticos (dentro de R, pero también para otros programas estadísticos y, por supuesto, para softwares de hojas de cálculo). Por esta razón, primero, es importante importar/cargar los datos antes de iniciar nuestro análisis. Esto ya se explicó en el documento Rpubs :: Importar datasets.
En los documentos Rpubs :: Examinar data frames y Rpubs :: Examinar data frames explicamos algunas funciones de R que nos permiten revisar propiedades de los data frames de las variables que contenidas en él. En este documento, explicaremos como recodificar las variables. Para más detalles relacionados con los data frames, se puede consultar el documento Rpubs :: data frames (generalidades).
Conteo <- c("Uno", "Dos", "Tres", "Cuatro", "Cinco")
Grado <- character(length(Conteo))
Grado[Conteo == "Uno"] <- "Primero"
Grado[Conteo == "Dos"] <- "Segundo"
Grado[Conteo == "Tres"] <- "Tercero"
Grado[Conteo == "Cuatro"] <- "Cuarto"
Grado[Conteo == "Cinco"] <- "Quinto"
Grado
## [1] "Primero" "Segundo" "Tercero" "Cuarto" "Quinto"
replace(c(1, 2, 3, 4, 5, 6), list=c(3, 5), values=c(30, 50))
## [1] 1 2 30 4 50 6
replace(c(1, 2, 3, 4, 5, 6), list=c(3, 5), values=c("A", "B"))
## [1] "1" "2" "A" "4" "B" "6"
dplyr::recode(Conteo, Uno="Primero", Dos="Segundo", Tres="Tercero", Cuatro="Cuarto", Cinco="Quinto")
## [1] "Primero" "Segundo" "Tercero" "Cuarto" "Quinto"
dplyr::recode(Conteo, Dos="Par", Cuatro="Par", .default="Impar")
## [1] "Impar" "Par" "Impar" "Par" "Impar"
Numero <- c(1:4, 2:5)
umbral <- 3
R1 <- ifelse(Numero < umbral, umbral, Numero); R1
## [1] 3 3 3 4 3 3 4 5
R2 <- ifelse(Numero < 3, 1, 0); R2
## [1] 1 1 0 0 1 0 0 0
R3 <- ifelse(Numero < 3, "M", "F"); R3
## [1] "M" "M" "F" "F" "M" "F" "F" "F"
Nivel <- c("Cero", "Tres", "Cinco", "Siete", "Nueve")
ifelse(Nivel %in% Conteo, Nivel, "Otro")
## [1] "Otro" "Tres" "Cinco" "Otro" "Otro"
N <- 1:6
ifelse(N > 3, "Alto", "Bajo")
## [1] "Bajo" "Bajo" "Bajo" "Alto" "Alto" "Alto"
#library(dplyr)
case_when((N <= 2) ~ 1,
(N > 2) & (N <= 4) ~ 2,
(N > 4) ~ 3)
## [1] 1 1 2 2 3 3
#library(dplyr)
case_when((N <= 2) ~ "Bajo",
(N > 2) & (N <= 4) ~ "Medio",
(N > 4) ~ "Alto")
## [1] "Bajo" "Bajo" "Medio" "Medio" "Alto" "Alto"
N_cat <- cut(N, breaks=c(0, 2, 4, Inf), labels=c("Bajo", "Medio", "Alto"))
summary(N_cat)
## Bajo Medio Alto
## 2 2 2
N_cat <- cut(N, breaks=c(-Inf, median(N), Inf))
summary(N_cat)
## (-Inf,3.5] (3.5, Inf]
## 3 3
N_cat <- cut(N, quantile(N), include.lowest=TRUE)
summary(N_cat)
## [1,2.25] (2.25,3.5] (3.5,4.75] (4.75,6]
## 2 1 1 2
Sexo <- c(1, 1, 0, 1, 0)
levels(Sexo) <- c("Femenino", "Masculino")
Sexo
## [1] 1 1 0 1 0
## attr(,"levels")
## [1] "Femenino" "Masculino"
Sexo_cat <- factor(Sexo, levels=c(0, 1), labels=c("F", "M"))
Sexo_cat
## [1] M M F M F
## Levels: F M
#library(forcats)
fct_recode(Sexo_cat, "Female"="F", "Male"="M")
## [1] Male Male Female Male Female
## Levels: Female Male
x <- c("a", "Otro", "c")
plyr::revalue(x, c(a = "Bajo", c = "Alto"))
## [1] "Bajo" "Otro" "Alto"
plyr::revalue(x, c("a" = "Bajo", "c" = "Alto"))
## [1] "Bajo" "Otro" "Alto"
y <- factor(c("a", "Otro", "c", "a"))
plyr::revalue(y, c(a = "Bajo", c = "Alto"))
## [1] Bajo Otro Alto Bajo
## Levels: Bajo Alto Otro
x<-rep(1:4,3)
car::recode(x, "c(1,2)='A'; else='B'")
## [1] "A" "A" "B" "B" "A" "A" "B" "B" "A" "A" "B" "B"
car::Recode(x, "1:2='A'; 3='B'")
## [1] "A" "A" "B" "4" "A" "A" "B" "4" "A" "A" "B" "4"
Estatura <- factor(c("Alta", "Baja", "Alta", "Alta", "Baja"))
Estatura[6] <- "Media"
Estatura
## [1] Alta Baja Alta Alta Baja <NA>
## Levels: Alta Baja
levels(Estatura) <- c(levels(Estatura), "Media")
Estatura[6] <- "Media"
Estatura
## [1] Alta Baja Alta Alta Baja Media
## Levels: Alta Baja Media
#library(forcats)
fct_expand(Estatura, "Otro")
## [1] Alta Baja Alta Alta Baja Media
## Levels: Alta Baja Media Otro
datos <- Estatura
levels(datos) <- list(Alta="Alta", No=c("Media", "Baja"))
datos
## [1] Alta No Alta Alta No No
## Levels: Alta No
library(forcats)
fct_collapse(Estatura, No=c("Media", "Baja"))
## [1] Alta No Alta Alta No No
## Levels: Alta No
Estatura[3:5]
## [1] Alta Alta Baja
## Levels: Alta Baja Media
droplevels(Estatura[3:5])
## [1] Alta Alta Baja
## Levels: Alta Baja
#library(forcats)
fct_drop(Estatura[3:5], "Media")
## [1] Alta Alta Baja
## Levels: Alta Baja
Letras <- factor(rep(c("a", "b", "c", "d"), each=2))
#library(forcats)
fct_relevel(Letras, "a", after=1)
## [1] a a b b c c d d
## Levels: b a c d
fct_relevel(Letras, "a", after=3)
## [1] a a b b c c d d
## Levels: b c d a
fct_relevel(Letras, "b", after=Inf)
## [1] a a b b c c d d
## Levels: a c d b
Letras <- factor(rep(c("a", "b", "c", "d"), each=2))
Numero <- c(1:3, 2:5, 1)
tapply(Numero, Letras, FUN=mean)
## a b c d
## 1.5 2.5 3.5 3.0
reorder(Letras, Numero, FUN=mean)
## [1] a a b b c c d d
## attr(,"scores")
## a b c d
## 1.5 2.5 3.5 3.0
## Levels: a b d c
A <- 1:5;
B <- c("Masculino", "Femenino", "Masculino", "Masculino", "Femenino")
C <- c(0, 1, 1, 0, 1)
D <- c("Mucho", "Poco", "Mucho", "Bastante", "Mucho")
E <- c("1", "2", "1", "2", "2")
datos <- data.frame(Posición = A, Genero = B, Salud = C, Opinion = D, Fuma = E); datos
## Posición Genero Salud Opinion Fuma
## 1 1 Masculino 0 Mucho 1
## 2 2 Femenino 1 Poco 2
## 3 3 Masculino 1 Mucho 1
## 4 4 Masculino 0 Bastante 2
## 5 5 Femenino 1 Mucho 2
Debemos especificar cuál es la variable a recodificar, cuáles son los criterios de recodificación y si deseamos que la nueva variable resultante de la recodificación sea un factor o no. Es importante reclacar que, en algunos casos, las recodificaciones tampoco afectarán al propio data.frame.
df <- datos
df$Salud <- factor(df$Salud)
levels(df$Salud)[1] <- "Sano"
levels(df$Salud)[2] <- "Enfermo"
df
## Posición Genero Salud Opinion Fuma
## 1 1 Masculino Sano Mucho 1
## 2 2 Femenino Enfermo Poco 2
## 3 3 Masculino Enfermo Mucho 1
## 4 4 Masculino Sano Bastante 2
## 5 5 Femenino Enfermo Mucho 2
df$Genero <- ifelse(df$Genero=="Masculino",1,0)
df
## Posición Genero Salud Opinion Fuma
## 1 1 1 Sano Mucho 1
## 2 2 0 Enfermo Poco 2
## 3 3 1 Enfermo Mucho 1
## 4 4 1 Sano Bastante 2
## 5 5 0 Enfermo Mucho 2
#library(plyr)
df$Opinion <- revalue(df$Opinion,c("Poco"="1","Bastante"="2", "Mucho"="3"))
df
## Posición Genero Salud Opinion Fuma
## 1 1 1 Sano 3 1
## 2 2 0 Enfermo 1 2
## 3 3 1 Enfermo 3 1
## 4 4 1 Sano 2 2
## 5 5 0 Enfermo 3 2
df <- data.frame(edad=c(22,21,34,40), sexo=c("H","M","H","H")); df
## edad sexo
## 1 22 H
## 2 21 M
## 3 34 H
## 4 40 H
#library(car)
edad_cod<-recode(df$edad, " 15:25='joven'; 26:65='adulto' "); edad_cod
## [1] "joven" "joven" "adulto" "adulto"
sexo_cod<-recode(df$sexo, " 'H'=0 ; 'M'=1 "); sexo_cod
## [1] 0 1 0 0
df
## edad sexo
## 1 22 H
## 2 21 M
## 3 34 H
## 4 40 H
A <- 1:5;
B <- c("Masculino", "Femenino", "Masculino", "Masculino", "Femenino")
C <- c(0, 1, 1, 0, 1)
D <- c("Mucho", "Poco", "Mucho", "Bastante", "Mucho")
E <- E <- c("1", "2", "1", "2", "2")
datos <- data.frame(Posición = A, Genero = B, Salud = C, Opinion = D, Fuma = E); datos
## Posición Genero Salud Opinion Fuma
## 1 1 Masculino 0 Mucho 1
## 2 2 Femenino 1 Poco 2
## 3 3 Masculino 1 Mucho 1
## 4 4 Masculino 0 Bastante 2
## 5 5 Femenino 1 Mucho 2
df <- datos
df$GenderMale <- ifelse(df$Genero=="Masculino",1,0)
df
## Posición Genero Salud Opinion Fuma GenderMale
## 1 1 Masculino 0 Mucho 1 1
## 2 2 Femenino 1 Poco 2 0
## 3 3 Masculino 1 Mucho 1 1
## 4 4 Masculino 0 Bastante 2 1
## 5 5 Femenino 1 Mucho 2 0
#library(plyr)
df$Opinion_cat <- revalue(df$Opinion,c("Poco"="1","Bastante"="2", "Mucho"="3"))
df$Fuma_cat <- revalue(df$Fuma,c("1"="Si","2"="No"))
df
## Posición Genero Salud Opinion Fuma GenderMale Opinion_cat Fuma_cat
## 1 1 Masculino 0 Mucho 1 1 3 Si
## 2 2 Femenino 1 Poco 2 0 1 No
## 3 3 Masculino 1 Mucho 1 1 3 Si
## 4 4 Masculino 0 Bastante 2 1 2 No
## 5 5 Femenino 1 Mucho 2 0 3 No
A <- c("Mucho", "Bastante", "Mucho", "Poco", "Poco")
B <- c("Mucho", "Poco", "Mucho", "Bastante", "Mucho")
C <- c( "Mucho", "Bastante", "Bastante", "Poco","Mucho")
D <- c( "Poco", "Bastante", "Mucho", "Mucho", "Mucho")
datos <- data.frame(A, B, C, D); datos
## A B C D
## 1 Mucho Mucho Mucho Poco
## 2 Bastante Poco Bastante Bastante
## 3 Mucho Mucho Bastante Mucho
## 4 Poco Bastante Poco Mucho
## 5 Poco Mucho Mucho Mucho
Nuevo <- data.frame(lapply(datos, factor, ordered=TRUE,
levels=c("Poco","Bastante", "Mucho"),
labels=c("1", "2", "3")))
Nuevo
## A B C D
## 1 3 3 3 1
## 2 2 1 2 2
## 3 3 3 2 3
## 4 1 2 1 3
## 5 1 3 3 3
df <- data.frame(lapply(Nuevo, factor, ordered=TRUE,
levels=c("1","2", "3"),
labels=c("Poco","Bastante", "Mucho")))
df
## A B C D
## 1 Mucho Mucho Mucho Poco
## 2 Bastante Poco Bastante Bastante
## 3 Mucho Mucho Bastante Mucho
## 4 Poco Bastante Poco Mucho
## 5 Poco Mucho Mucho Mucho
Crear un nuevo documento R Markdown, realizando las siguientes actividades. Crear variables y data frames y practicar los códigos explicados anteriormente.
Consultar el documento RPubs :: Enlace y materiales de ayuda.
If you found any ERRORS or have SUGGESTIONS, please report them to my email. Thanks.