R Markdown

Formato para desarrollar textos en R Markdown

¿Qué se necesita? Todo lo que se pone en un script.

Además de “r”, dentro de las llaves se pone “{r, eval=TRUE}”, de esta manera se le pide que evalue el contenido pues no son caractéres sino código y que se muestren los resultados: {r, eval=TRUE}

#0.  Preparar entorno de trabajo
rm(list=ls()); graphics.off(); options(warn=-1)  

#1. Cargar librerias
paquetes=c("scales","survey","ggsurvey","forcats","haven","readxl","readxl","fastDummies","readr", "dplyr", "foreign", "tidyr", "ggplot2", "writexl","openxlsx","gridExtra")
for (i in paquetes) {if (!require(i, character.only = TRUE)) {install.packages(i);library(i, character.only = TRUE)} else {library(i, character.only = TRUE)}}
## Loading required package: scales
## Loading required package: survey
## Loading required package: grid
## Loading required package: Matrix
## Loading required package: survival
## 
## Attaching package: 'survey'
## The following object is masked from 'package:graphics':
## 
##     dotchart
## Loading required package: ggsurvey
## Loading required package: ggplot2
## Loading required package: hexbin
## Loading required package: dplyr
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
## Loading required package: forcats
## Loading required package: haven
## Loading required package: readxl
## Loading required package: fastDummies
## Loading required package: readr
## 
## Attaching package: 'readr'
## The following object is masked from 'package:scales':
## 
##     col_factor
## Loading required package: foreign
## Loading required package: tidyr
## 
## Attaching package: 'tidyr'
## The following objects are masked from 'package:Matrix':
## 
##     expand, pack, unpack
## Loading required package: writexl
## Loading required package: openxlsx
## Loading required package: gridExtra
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
#2.  Directorio de trabajo
setwd("~/CURSOS/Curso_visulizacionR/CursoVisualR")
enoe=read_dta("ENOE_SDEMT423.dta")

# Variable filtro

enoe <- enoe %>%
  mutate(f = r_def == 0 & (c_res == 1 | c_res == 3) & eda >= 15 & eda <= 98)

enoe=enoe %>% filter(f==1)

#3. Preparar datos

#3.1 Subconjuntos de datos

# CLASE2=Condicion de ocupacion
# Codigos: 1=Ocupado, 2=Desocupado, 3=Disponible, 4=No disponible

# Convertir la variable a dato numerico
enoe$clase2=as.numeric(enoe$clase2)

# Filtrar la base, necesitamos a los ocupados CLASE2=1
ocupados=enoe%>%filter(clase2==1)

#3.2 Etiquetado de variables

# Codigos: 1=Hombre, 2=Mujer
ocupados <- ocupados %>%
  mutate(sex = fct_recode(factor(sex),
                          Hombre = "1",
                          Mujer = "2"))

# pos_ocu=Posicion en la ocupacion
# Codigos: 1=Suborninado, 2=Independiente, 3=Disponible, 0=No aplica
ocupados <- ocupados %>%
  mutate(pos_ocu = fct_recode(factor(pos_ocu),
                              "No Aplica" = "0",
                              "Suborninado" = "1",
                              "Empleadores" = "2",
                              "Cuenta propia" = "3",
                              "Sin pago" = "4"))

#### 4.2 Con 2 variables discretas ####

# Ahora vamos a guardar la definición de la base de datos y la variable en un elemento llamado g1
g1<-ggplot(ocupados) + aes(pos_ocu)            

##### Opción 1: Pantalla dividida  #####
g1+geom_bar(fill="yellowgreen")+
  facet_wrap(~ sex)+                          
  ggtitle("Ocupacion por sexo")+
  xlab("Posicion de la ocupacion")+
  ylab("Personas")

# agregar más detalles

g1+geom_bar(fill="yellowgreen")+
  facet_wrap(~ sex)+                        
  ggtitle("Ocupacion por sexo")+
  xlab("Posicion de la ocupacion")+
  ylab("Personas")+
  geom_text(aes(label=..count..), stat='count',  
            position=position_dodge(0.5), 
            vjust=-0.5, 
            size=3.5) 

##### Opción 2: Separa las barras #####

g2<-ggplot(ocupados,aes(x=pos_ocu,fill=sex))   

g2+geom_bar(position = "dodge")+
  ggtitle("Ocupacion por sexo")+              
  xlab("Posicion de la ocupacion")+
  ylab("Personas")+
  scale_fill_brewer(palette = "Blues")+
  scale_y_continuous(labels = scales::comma)

# agregar más detalles

g2+geom_bar(position = "dodge", stat = "count") +  
  geom_text(aes(label = scales::comma(..count..)), stat = "count", position = position_dodge(width = 0.9), vjust = -0.5, size = 2.5) +  
  ggtitle("Ocupación por Sexo") +  
  xlab("Posición de la Ocupación") +  
  ylab("Personas") +  
  theme_minimal(base_size = 14) +
  scale_fill_brewer(palette = "Blues", name = "Sexo") + 
  scale_y_continuous(labels = scales::comma)+
  labs(caption = "Nota: población de 15 años y más\nFuente: ENOE cuarto trimestre 2023") +  
  theme_minimal(base_size = 14) +
  theme(plot.title = element_text(hjust = 0.5),                                              
        plot.caption = element_text(hjust = 0, size = 9))

##### Opción 3: Apila los elementos uno encima del otro #####

# Preparación de los datos para calcular los porcentajes correctos
ocupados_r <- ocupados %>%
  group_by(pos_ocu, sex) %>%                              
  summarise(count = n(), .groups = 'drop') %>%
  group_by(pos_ocu) %>%
  mutate(percent = count / sum(count) * 100)

# Creación del gráfico con los datos preparados
g3 <- ggplot(ocupados_r, aes(x = pos_ocu, y = percent, fill = sex)) 

g3+geom_bar(stat = "identity", position = "dodge") +  
  geom_text(aes(label = scales::percent(percent / 100)), position = position_dodge(width = 0.9), vjust = -0.5, size = 2.5) + 
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Porcentaje") +
  scale_fill_brewer(palette = "Blues", name = "Sexo") + 
  scale_y_continuous(labels = percent_format(scale = 1)) 

# Creación del gráfico con las cifras divididas entre 100
g3+geom_bar(stat = "identity", position = "fill") +  
  geom_text(aes(label = scales::percent(percent / 100, accuracy = 0.1)), position = position_fill(vjust = 0.5), size = 3.5) +
  ggtitle("Ocupación por Sexo") +
  xlab("Posición de la Ocupación") +
  ylab("Porcentaje de Personas") +
  scale_fill_brewer(palette = "Blues", name = "Sexo") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +  
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

Por su parte, al poner {r, echo=TRUE} se le pide que muestre el código y resultado en el render. {warning=FALSE} pide que no se muestren las advertencias, {message=FALSE} y {error=FALSE} también desactiva los errores y mensajes que aparecen en la consola

Nota: para que muestre los resultados se le quita la parte del código donde se apagan las gráficas: “rm(list=ls()); graphics.off(); options(warn=-1)”

#1. Cargar librerias
paquetes=c("scales","survey","ggsurvey","forcats","haven","readxl","readxl","fastDummies","readr", "dplyr", "foreign", "tidyr", "ggplot2", "writexl","openxlsx","gridExtra")
for (i in paquetes) {if (!require(i, character.only = TRUE)) {install.packages(i);library(i, character.only = TRUE)} else {library(i, character.only = TRUE)}}

#2.  Directorio de trabajo
setwd("~/CURSOS/Curso_visulizacionR/CursoVisualR")
enoe=read_dta("ENOE_SDEMT423.dta")

# Variable filtro

enoe <- enoe %>%
  mutate(f = r_def == 0 & (c_res == 1 | c_res == 3) & eda >= 15 & eda <= 98)

enoe=enoe %>% filter(f==1)

#3. Preparar datos

#3.1 Subconjuntos de datos

# CLASE2=Condicion de ocupacion
# Codigos: 1=Ocupado, 2=Desocupado, 3=Disponible, 4=No disponible

# Convertir la variable a dato numerico
enoe$clase2=as.numeric(enoe$clase2)

# Filtrar la base, necesitamos a los ocupados CLASE2=1
ocupados=enoe%>%filter(clase2==1)

#3.2 Etiquetado de variables

# Codigos: 1=Hombre, 2=Mujer
ocupados <- ocupados %>%
  mutate(sex = fct_recode(factor(sex),
                          Hombre = "1",
                          Mujer = "2"))

# pos_ocu=Posicion en la ocupacion
# Codigos: 1=Suborninado, 2=Independiente, 3=Disponible, 0=No aplica
ocupados <- ocupados %>%
  mutate(pos_ocu = fct_recode(factor(pos_ocu),
                              "No Aplica" = "0",
                              "Suborninado" = "1",
                              "Empleadores" = "2",
                              "Cuenta propia" = "3",
                              "Sin pago" = "4"))

#### 4.2 Con 2 variables discretas ####

# Ahora vamos a guardar la definición de la base de datos y la variable en un elemento llamado g1
g1<-ggplot(ocupados) + aes(pos_ocu)            

##### Opción 1: Pantalla dividida  #####
g1+geom_bar(fill="yellowgreen")+
  facet_wrap(~ sex)+                          
  ggtitle("Ocupacion por sexo")+
  xlab("Posicion de la ocupacion")+
  ylab("Personas")

# agregar más detalles

g1+geom_bar(fill="yellowgreen")+
  facet_wrap(~ sex)+                        
  ggtitle("Ocupacion por sexo")+
  xlab("Posicion de la ocupacion")+
  ylab("Personas")+
  geom_text(aes(label=..count..), stat='count',  
            position=position_dodge(0.5), 
            vjust=-0.5, 
            size=3.5) 

#### 4.2 Con 2 variables discretas ####

g1<-ggplot(ocupados) + aes(pos_ocu)     

##### Opción 1: Pantalla dividida  #####
g1+geom_bar(fill="yellowgreen")+
  facet_wrap(~ sex)+                        
  ggtitle("Ocupacion por sexo")+
  xlab("Posicion de la ocupacion")+
  ylab("Personas")

La fuente de las gráficas mostradas anteriormente es la Encuesta Nacional de Ocupación y Empleo ENOE del Instituto Nacional de Estadística y Geografía (INEGI).