Skip to content

Commit

Permalink
practica semana 6
Browse files Browse the repository at this point in the history
  • Loading branch information
cballejo committed Nov 10, 2023
1 parent 197071c commit 02f0970
Showing 1 changed file with 384 additions and 0 deletions.
384 changes: 384 additions & 0 deletions practicas/Practica_semana6.R
Original file line number Diff line number Diff line change
@@ -0,0 +1,384 @@
# Esta practica pertenece al temario del Encuentro 6 del curso

# La idea es ver algunas otras funciones o aplicaciones de lo
# mostrado durante el encuentro sincrónico

# Este código está comentado a modo de guía

#-----------------------

# Activamos paquetes

library(tidyverse)
library(rstatix)
library(gtsummary)
library(flextable)

# leemos el archivo rita_prueba.csv

rita <- read_csv2("practicas/rita_prueba.csv")

# utilizaremos la función across() para convertir
# tipo de datos en forma masiva algunos formatos de variables

# los nombres de las fechas comienzan con "FE"

rita |>
select(starts_with("FE"))

# algunos valores donde no hay datos figuran con los caracteres
# "N/D" deberíamos cambiarlo por valores NA

# esto se puede hacer directamente en la lectura de los datos
# utilizando el argumento na

rita <- read_csv2("practicas/rita_prueba.csv",
na = c("", "NA", "N/D"))

# le estamos indicando que tanto los valores vacíos "" como los
# que dicen "NA" y "N/D" serán convertidos en valores NA

rita |>
select(starts_with("FE"))

# ahora tenemos las 8 variables con formato caracteres con fechas

# para poder convertir todo en una sola operación podemos hacer:

rita <- rita |>
mutate(across(.cols = starts_with("FE"), .fns = dmy))

# verificamos

rita |>
select(starts_with("FE"))

# convertimos 8 variables en date en un solo paso

# lo mismo se puede hacer con otras variables, como por
# ejemplo variables de caracter terminadas con N donde estan
# los nombres de ciertas variables categóricas

rita |>
select(ends_with("N") & where(is.character))

rita <- rita |>
mutate(across(.cols = ends_with("N") & where(is.character),
.fns = as_factor))

# corroboramos seleccionando por factor

rita |>
select(ends_with("N") & where(is.factor))

# estos permite en pocos pasos poder convertir grupos
# numerosos de variables

# medidas resumen de una variable cuanti de rita

rita |>
get_summary_stats(DGED)

# frecuencia de una variable cuali de rita

rita |>
freq_table(OSPTE) |>
arrange(desc(prop))

# además de lo mostrado en el script del encuentro sobre
# las virtudes de gtsummary mostraremos algunos ejemplos
# más complejos documentados

# tabla resumen de variable cuantitativa estratificada por
# variable categórica

rita |>
select(DGED, PTEDU) |>
filter(PTEDU %in% c("Primario Incompleto",
"Primario Completo",
"Secundario Incompleto",
"Secundario Completo")) |>
mutate(PTEDU = fct_relevel(PTEDU, c("Primario Incompleto",
"Primario Completo",
"Secundario Incompleto",
"Secundario Completo"))) |>
tbl_summary(
by = PTEDU,
type = all_continuous() ~ "continuous2",
label = list(DGED ~ "Edad al diagnóstico"),
statistic = all_continuous() ~ c(
"{mean} ({sd})",
"{median} ({p25}, {p75})",
"{min}, {max}"
)) |>
modify_header(label ~ "**Variable**") |>
italicize_levels()

# documentacion

# rita |>
# select(DGED, PTEDU) |>
# filter(PTEDU %in% c("Primario Incompleto",
# "Primario Completo",
# "Secundario Incompleto",
# "Secundario Completo")) |>
# mutate(PTEDU = fct_relevel(PTEDU, c("Primario Incompleto",
# "Primario Completo",
# "Secundario Incompleto",
# "Secundario Completo")))

# en estas líneas seleccionamos las variables en juego y
# hacemos un recorte de algunas categorías de PTEDU
# como es una variable ordinal y el orden alfabetico natural
# no coincide con el orden real, se usa fct_relevel para cambiar
# el orden de sus niveles


# tbl_summary(
# by = PTEDU,
# type = all_continuous() ~ "continuous2",
# label = list(DGED ~ "Edad al diagnóstico"),
# statistic = all_continuous() ~ c(
# "{mean} ({sd})",
# "{median} ({p25}, {p75})",
# "{min}, {max}"
# ),
# missing = "no"
# )


# usamos la función tbl_summary() con los argumentos
# by = para estratificar por PTEDU
# type = los resumenes se muestras en mas de una fila
# label = para cambiar la etiqueta de DGED
# statistic = pedimos la media con el desvio, la mediana y los
# quantiles 25 y 75 y el minimo y máximo

# modify_header(label ~ "**Variable**") |>
# italicize_levels()

# modificamos la cabecera con Variable en negrita
# hacemos italica las fuentes de las medidas

# otro ejemplo:

rita |>
filter(ECOG != "Desconocido") |>
select(PTESXN, ECOG) |>
tbl_summary(
by = PTESXN,
missing = "no",
label = list(PTESXN ~ "Sexo", ECOG ~ "Status ECOG")
) |>
modify_header(label ~ "")

# documentación

# rita |>
# filter(ECOG != "Desconocido") |>
# select(PTESXN, ECOG) |>

# seleccionamos y filtramos las variables que participan de
# la tabla

# tbl_summary(
# by = PTESXN,
# missing = "no",
# label = list(PTESXN ~ "Sexo", ECOG ~ "Status ECOG")
# ) |>
# modify_header(label ~ "")

# usamos tbl_summary con

# by = variable de estratificación
# missing = "no" indica que los NA no serán tenidos en cuenta
# label = etiquetamos las variables
# modify_header, modificamos la cabecera quitando el texto

# tabla cruce de dos variables categóricas

# función tbl_cross()

rita |>
select(PTESXN, PTEDU) |>
filter(PTEDU %in% c("Primario Incompleto",
"Primario Completo",
"Secundario Incompleto",
"Secundario Completo")) |>
mutate(PTEDU = fct_relevel(PTEDU, c("Primario Incompleto",
"Primario Completo",
"Secundario Incompleto",
"Secundario Completo"))) |>
tbl_cross(
row = PTEDU,
col = PTESXN,
label = list(PTEDU = "Nivel educativo",
PTESXN = "Sexo"),
percent = "cell"
) |>
bold_labels()

# documentación

# rita |>
# select(PTESXN, PTEDU) |>
# filter(PTEDU %in% c("Primario Incompleto",
# "Primario Completo",
# "Secundario Incompleto",
# "Secundario Completo")) |>
# mutate(PTEDU = fct_relevel(PTEDU, c("Primario Incompleto",
# "Primario Completo",
# "Secundario Incompleto",
# "Secundario Completo"))) |>

# mismo trabajo que en el primer ejemplo

# tbl_cross(
# row = PTEDU,
# col = PTESXN,
# label = list(PTEDU = "Nivel educativo",
# PTESXN = "Sexo"),
# percent = "cell"
# ) |>
# bold_labels()

# usamos la función tbl_cross() para hacer cruces de variables
# categóricas, con los argumentos:

# row = la variable de la fila
# col = la variable de la columna
# label = las etiquetas de las variables
# percent = el formato del porcentaje (uno en cada celda)

# bold_labels() - hace que las variables aparezcan en negrita

# El paquete flextable ofrece un numeroso conjunto de funciones
# para trabajar con tablas que luego se pueden exportar
# a formatos interesantes como Word o html

# tabla tipo dataframe

# por ejemplo un recorte de una pequeña tabla de rita
# creando una variable DEMORA entre fecha de inicio y
# fecha de consulta y filtrando las demoras de 5 a 10
# días (mostramos las 10 primeras)

rita |>
mutate(DEMORA = interval(FEINI, FECON)%/%ddays()) |>
select(IDPTE, IDTUM, FEINI, FECON, DEMORA) |>
filter(between(DEMORA, 5, 10)) |>
slice(1:10)

# el mismo código en lugar de salir por consola
# lo convertimos en objeto flextable y es mostrado
# en el Viewer (tipo html predeterminado)

rita |>
mutate(DEMORA = interval(FEINI, FECON)%/%ddays()) |>
select(IDPTE, IDTUM, FEINI, FECON, DEMORA) |>
filter(between(DEMORA, 5, 10)) |>
slice(1:10) |>
flextable()

# le queremos cambiar el aspecto al ancho de las columnas
# y que ajusten automáticamente

rita |>
mutate(DEMORA = interval(FEINI, FECON)%/%ddays()) |>
select(IDPTE, IDTUM, FEINI, FECON, DEMORA) |>
filter(between(DEMORA, 5, 10)) |>
slice(1:10) |>
flextable() |>
autofit()

# le cambiamos el marcador de miles a IDPTE e IDTUM

rita |>
mutate(DEMORA = interval(FEINI, FECON)%/%ddays()) |>
select(IDPTE, IDTUM, FEINI, FECON, DEMORA) |>
filter(between(DEMORA, 5, 10)) |>
slice(1:10) |>
flextable() |>
autofit() |>
colformat_double(big.mark = "", digits = 0)

# cambiamos la presentación de las fechas al formato
# dd/mm/aaaa

rita |>
mutate(DEMORA = interval(FEINI, FECON)%/%ddays()) |>
select(IDPTE, IDTUM, FEINI, FECON, DEMORA) |>
filter(between(DEMORA, 5, 10)) |>
slice(1:10) |>
flextable() |>
autofit() |>
colformat_double(big.mark = "", digits = 0) |>
colformat_date(fmt_date = "%d/%m/%Y")

# igual pero con otro formato de fecha

rita |>
mutate(DEMORA = interval(FEINI, FECON)%/%ddays()) |>
select(IDPTE, IDTUM, FEINI, FECON, DEMORA) |>
filter(between(DEMORA, 5, 10)) |>
slice(1:10) |>
flextable() |>
colformat_double(big.mark = "", digits = 0) |>
colformat_date(fmt_date = "%d %B %Y") |>
autofit()

# guardamos la tabla

tabla_demora <- rita |>
mutate(DEMORA = interval(FEINI, FECON)%/%ddays()) |>
select(IDPTE, IDTUM, FEINI, FECON, DEMORA) |>
filter(between(DEMORA, 5, 10)) |>
slice(1:10) |>
flextable() |>
colformat_double(big.mark = "", digits = 0) |>
colformat_date(fmt_date = "%d %B %Y") |>
autofit()

# objeto de clase flextable

class(tabla_demora)



# exportamos la tabla en html

save_as_html(tabla_demora,
path = "practicas/demora.html")


# exportamos la tabla en docx

save_as_docx(tabla_demora,
path = "practicas/demora.docx")

# cambiamos el formato de salida con el paquete officer

# officer nos permite manipular documentos de Word y PowerPoint

library(officer)

# en este caso creamos unas características de documento
# cambiando la disposición apaisada, un ancho y alto específico
# en pulgadas y margenes definidos

propiedades_seccion <- prop_section(
page_size = page_size(
orient = "landscape",
width = 8.3, height = 11.7
),
type = "continuous",
page_margins = page_mar()
)

# exportamos en demora2.docx con estas especificaciones
# de página en Word

save_as_docx(tabla_demora,
path = "practicas/demora2.docx",
pr_section = propiedades_seccion
)

0 comments on commit 02f0970

Please sign in to comment.