Fecha de la ultima revisión

## [1] "2025-04-07"

test

library(ggplot2)
library(tidyverse)
library(ggversa)
library(gt)
library(gridExtra)

En este documento estaremos evaluando una serie de alternativas y paquetes para preparar tablas.

Tablas con Markdown

El primer ejemplo usa el sistema de markdown para preparar tablas


Tablas sencillas y R

Las tablas sencillas se usa cuando no hay mucha información y no estamos importando los datos externo o de un objeto de R.

  • “|”, para separar columnas
  • “:”, para indentificar si el texto o números estan pegado a la derecha, izquierda y centrado
  • “|—–|”, para separar el nombre de las columnas de la información de la tabla

A ver, mire la Tabla a y la Tabla b. ¿Encuentra los errores? Vea que la Tabla a muestra los valores con demasiadas cifras significativas, justificaciones ilógicas, formato inconsistente y no especifica las unidades de los valores. Vemos en la Tabla b que ahora las cifras significativas aparecen de forma consistente y en el mismo formato (2da y 3ra columnas), todos los números están justificados a la derecha y las unidades de cm se especifican (3ra columna).

En conclusión, no solo la Tabla b se ve más presentable, si no que también corrige los problemas, de ahí la importancia de presentar datos tabulados de forma que facilite su comunicación a la audiencia.


Tabla a. Errores de formato, justificación y escala

Genero Tamaño de muestra El largo de la hoja valor de p
Mujeres 27273 11.03 0.000000001
Hombres 169019 13.5 0.098979676
Especie 1.087^6 14.5 .0300001

Tabla b. Errores anteriores corregidos

Tamaño de muestra El largo de la hoja (cm) valor de p
Mujeres 27273 11.0 <0.001
Hombres 169019 13.5 0.099
Especie 1087669 14.5 0.030

Para facilitar la producción de una tabla siempre puede usar este enlace

https://www.tablesgenerator.com/markdown_tables


  1. Ejercicio

Prepara una tabla de la lista de tu familia, nombre de tu madre, abuelas y cuantos hijos tienen. Los nombres deberían esta justificado a la izquierda y la cantidad de hijos a la derecha, en una tercera columna pon el municipio donde nacio esa persona.


tibble y tribble

Un tibble es una tabla que es muy similar a un data frame, con algunas diferencias que le hace más fácil encontrar errores y imprimir esas tablas. Aqui vemos un data frame que fue convertida en tibble, a evaluar la tabla no se ve ninguna diferencia. Vea este enlace para más información https://r4ds.had.co.nz/tibbles.html

El archivo esta un formato “data frame” y “A” esta en un formato tibble. Nota que no se ve diferencias entre los dos a simple vista. Pero es importante que sepa detras en el codigo del formato, hay codificación que puede facilitar o no un analisis en cada uno de las opciones.

library(ggversa)
library(tibble)
Anolis
## # A tibble: 503 × 15
##    STUDY      Survey_Site     LOCATION TIME  DATE  SEASON SPECIES SEX_AGE HEIGHT
##    <chr>      <chr>           <chr>    <tim> <chr> <chr>  <chr>   <chr>    <dbl>
##  1 Mark/recap North Tower     El Verde 10:46 3/13… dry    Anolis… Female     0  
##  2 Mark/recap Woods walkway … El Verde 10:15 2/20… dry    Anolis… Juvenil    0  
##  3 Mark/recap Woods walkway … El Verde 11:15 2/21… dry    Anolis… Male       0  
##  4 Mark/recap North Tower     El Verde 11:06 3/16… dry    Anolis… Juvenil    0.3
##  5 Mark/recap North Tower     El Verde 12:31 3/11… dry    Anolis… Male       0.3
##  6 Mark/recap North Tower     El Verde 01:00 3/9/… dry    Anolis… Female     0.4
##  7 Mark/recap Woods walkway … El Verde 10:22 2/22… dry    Anolis… Female     0.4
##  8 Mark/recap North Tower     El Verde 11:55 3/12… dry    Anolis… Juvenil    0.4
##  9 Mark/recap Woods walkway … El Verde 10:15 2/20… dry    Anolis… Juvenil    0.4
## 10 Mark/recap North Tower     El Verde 12:31 3/11… dry    Anolis… Female     0.5
## # ℹ 493 more rows
## # ℹ 6 more variables: DISTANCE_FROM_CENTERLINE <dbl>, PERCH_SUBSTRATE <chr>,
## #   PERCH_DIAMETER <int>, WEIGHT <dbl>, SVL <dbl>, TAIL <dbl>
A=as_tibble(Anolis)
A
## # A tibble: 503 × 15
##    STUDY      Survey_Site     LOCATION TIME  DATE  SEASON SPECIES SEX_AGE HEIGHT
##    <chr>      <chr>           <chr>    <tim> <chr> <chr>  <chr>   <chr>    <dbl>
##  1 Mark/recap North Tower     El Verde 10:46 3/13… dry    Anolis… Female     0  
##  2 Mark/recap Woods walkway … El Verde 10:15 2/20… dry    Anolis… Juvenil    0  
##  3 Mark/recap Woods walkway … El Verde 11:15 2/21… dry    Anolis… Male       0  
##  4 Mark/recap North Tower     El Verde 11:06 3/16… dry    Anolis… Juvenil    0.3
##  5 Mark/recap North Tower     El Verde 12:31 3/11… dry    Anolis… Male       0.3
##  6 Mark/recap North Tower     El Verde 01:00 3/9/… dry    Anolis… Female     0.4
##  7 Mark/recap Woods walkway … El Verde 10:22 2/22… dry    Anolis… Female     0.4
##  8 Mark/recap North Tower     El Verde 11:55 3/12… dry    Anolis… Juvenil    0.4
##  9 Mark/recap Woods walkway … El Verde 10:15 2/20… dry    Anolis… Juvenil    0.4
## 10 Mark/recap North Tower     El Verde 12:31 3/11… dry    Anolis… Female     0.5
## # ℹ 493 more rows
## # ℹ 6 more variables: DISTANCE_FROM_CENTERLINE <dbl>, PERCH_SUBSTRATE <chr>,
## #   PERCH_DIAMETER <int>, WEIGHT <dbl>, SVL <dbl>, TAIL <dbl>

Crear un tibble en .Rmd

Constuir una tabla con tribble es una forma de crear un tibble en un documento .Rmd. La función tribble() es una función de la librería tibble que permite crear tablas de forma sencilla y rápida. La función tribble() toma como argumento una serie de columnas y filas, y devuelve un objeto tibble.

  • tribble, organizado por fila, row
  • tibble, organizado por columna, column
Tabla=tribble(~"Nombre Cientifico de las Especies", ~"Nombre Comun", ~N,
        "Especie_1", "Angelito", 10,
        "Especie_2", "...", 300,
        "Prestoea montana","Palma de Sierra", 1,
        "....","...", NA
        )
Tabla
## # A tibble: 4 × 3
##   `Nombre Cientifico de las Especies` `Nombre Comun`      N
##   <chr>                               <chr>           <dbl>
## 1 Especie_1                           Angelito           10
## 2 Especie_2                           ...               300
## 3 Prestoea montana                    Palma de Sierra     1
## 4 ....                                ...                NA

tibble: Organizar la tabla por fila.

Tabla2=tibble(
  "Nombre Cientifico de las Especies" = c("Especie_1", "Especie_2", "Prestoea montana"),
  "Nombre Comun" = c("Angelito", "...", "Palma de Sierra"),
  N = c(10, 300, 1)
)

Tabla2
## # A tibble: 3 × 3
##   `Nombre Cientifico de las Especies` `Nombre Comun`      N
##   <chr>                               <chr>           <dbl>
## 1 Especie_1                           Angelito           10
## 2 Especie_2                           ...               300
## 3 Prestoea montana                    Palma de Sierra     1

El paquete gt

El paquete gt es the “Grammar of tables”, y la función principal es “gt”. Si usamos la tabla que creamos anteriomente se puede mejor la aparencia de la tabla

library(gt)
head(A)
## # A tibble: 6 × 15
##   STUDY      Survey_Site      LOCATION TIME  DATE  SEASON SPECIES SEX_AGE HEIGHT
##   <chr>      <chr>            <chr>    <tim> <chr> <chr>  <chr>   <chr>    <dbl>
## 1 Mark/recap North Tower      El Verde 10:46 3/13… dry    Anolis… Female     0  
## 2 Mark/recap Woods walkway t… El Verde 10:15 2/20… dry    Anolis… Juvenil    0  
## 3 Mark/recap Woods walkway t… El Verde 11:15 2/21… dry    Anolis… Male       0  
## 4 Mark/recap North Tower      El Verde 11:06 3/16… dry    Anolis… Juvenil    0.3
## 5 Mark/recap North Tower      El Verde 12:31 3/11… dry    Anolis… Male       0.3
## 6 Mark/recap North Tower      El Verde 01:00 3/9/… dry    Anolis… Female     0.4
## # ℹ 6 more variables: DISTANCE_FROM_CENTERLINE <dbl>, PERCH_SUBSTRATE <chr>,
## #   PERCH_DIAMETER <int>, WEIGHT <dbl>, SVL <dbl>, TAIL <dbl>
gt(head(A))
STUDY Survey_Site LOCATION TIME DATE SEASON SPECIES SEX_AGE HEIGHT DISTANCE_FROM_CENTERLINE PERCH_SUBSTRATE PERCH_DIAMETER WEIGHT SVL TAIL
Mark/recap North Tower El Verde 10:46:00 3/13/92 0:00 dry Anolis stratulus Female 0.0 2.7 ground 6 NA NA NA
Mark/recap Woods walkway tower El Verde 10:15:00 2/20/89 0:00 dry Anolis stratulus Juvenil 0.0 2.0 NA NA NA 29 NA
Mark/recap Woods walkway tower El Verde 11:15:00 2/21/89 0:00 dry Anolis stratulus Male 0.0 1.4 on root at base 0 NA NA NA
Mark/recap North Tower El Verde 11:06:00 3/16/92 0:00 dry Anolis stratulus Juvenil 0.3 1.0 tower 30 7.0 26 3
Mark/recap North Tower El Verde 12:31:00 3/11/92 0:00 dry Anolis stratulus Male 0.3 0.9 tower 5 2.4 45 71
Mark/recap North Tower El Verde 01:00:00 3/9/92 0:00 dry Anolis stratulus Female 0.4 0.9 tower 5 1.6 37 58

Vea este enlace para información de las funciones de gt https://gt.rstudio.com y este https://themockup.blog/static/gt-cookbook.html


Añadiendo titulo y referencia a una tabla gt

A %>% 
  dplyr::select(STUDY, Survey_Site, TIME, DATE, SEASON, SEX_AGE, SVL) %>% 
  head() %>% 
  gt() %>% 
  tab_header(title = "Datos sobre la presencia y tamaño de Anolis en la estación El Verde, PR",
             subtitle = "Datos recolectado por Douglas Reagan" )
Datos sobre la presencia y tamaño de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37

Añadiendo itálico a algunas palabras

A %>% 
  dplyr::select(STUDY, Survey_Site, TIME, DATE, SEASON, SEX_AGE, SVL) %>% 
  head() %>% 
  gt() %>% 
  tab_header(title = md("Datos sobre la presencia y tamanõ de *Anolis* en la estación **El Verde**, PR"),
             subtitle = "Datos recolectado por Douglas Reagan" )
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37

Añadiendo una referencia

https://luq.lter.network/data/luqmetadata1

A %>% 
  select(STUDY, Survey_Site, TIME, DATE, SEASON, SEX_AGE, SVL) %>% 
  head() %>% 
  gt() %>% 
  tab_header(title = md("Datos sobre la presencia y tamanõ de *Anolis* en la estación El Verde, PR"),
             subtitle = "Datos recolectado por Douglas Reagan" ) %>% 
  tab_source_note(
    source_note = "https://luq.lter.network/data/luqmetadata1")
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37
https://luq.lter.network/data/luqmetadata1

Identificando una celda especifica con un footnote

AA=A %>% 
  select(STUDY, Survey_Site, TIME, DATE, SEASON, SEX_AGE, SVL) %>% 
  head() %>% 
  gt() %>% 
  tab_header(title = md("Datos sobre la presencia y tamanõ de *Anolis* en la estación El Verde, PR"),
             subtitle = "Datos recolectado por Douglas Reagan" ) %>% 
  tab_source_note(
    source_note = "https://luq.lter.network/data/luqmetadata1") %>% 
  tab_footnote(
    footnote = "Podria haber sido confundido con un extraterrestre",
    locations = cells_body(columns=SEX_AGE, rows = 2)
  ) %>% 
    tab_footnote(
    footnote = "Podria tener un texto interesante ",
    locations = cells_body(columns=SEX_AGE, rows = 3)
  )%>% 
    tab_footnote(
    footnote = "yo, no se la diferencia entre machos y hembras",
    locations = cells_body(columns=SEX_AGE, rows = 3)
  )
AA
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil1 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male2,3 NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37
https://luq.lter.network/data/luqmetadata1
1 Podria haber sido confundido con un extraterrestre
2 Podria tener un texto interesante
3 yo, no se la diferencia entre machos y hembras

AA %>% 
  tab_style(
    style = list(cell_fill(color = "Orange")),
    locations = cells_body(columns = STUDY)
  )%>% 
  tab_style(
    style = list(cell_fill(color = "Red")),
    locations = cells_body(columns = DATE)
  )
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil1 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male2,3 NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37
https://luq.lter.network/data/luqmetadata1
1 Podria haber sido confundido con un extraterrestre
2 Podria tener un texto interesante
3 yo, no se la diferencia entre machos y hembras

AA %>% 
  tab_style(
    style = list(cell_fill(color = "Orange")),
    locations = cells_body(columns = STUDY, rows = 1)
  ) %>% 
  tab_style(
    style = list(cell_text(color = "Orange")),
    locations = cells_body(columns=SEX_AGE, rows = 3)
  )
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil1 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male2,3 NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37
https://luq.lter.network/data/luqmetadata1
1 Podria haber sido confundido con un extraterrestre
2 Podria tener un texto interesante
3 yo, no se la diferencia entre machos y hembras

AAA=AA %>% 
  tab_style(
    style = list(cell_fill(color = "Orange")),
    locations = cells_body(columns = STUDY)
  ) %>% 
  tab_style(
    style = list(cell_text(color = "Orange")),
    locations = cells_body(columns=SEX_AGE, rows = 3)
  ) %>% 
    tab_style(
    style = list(cell_text(style = "italic", weight = "bold")),
    locations = cells_body(columns=Survey_Site, rows = 1)
    )

AAA
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil1 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male2,3 NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37
https://luq.lter.network/data/luqmetadata1
1 Podria haber sido confundido con un extraterrestre
2 Podria tener un texto interesante
3 yo, no se la diferencia entre machos y hembras

Formateo condicional

Aqui usamos la condición de SVL sea debajo un tamaño o más grande y se le asigna un color correspondiente.

AAAA= AAA |> 
  tab_style(
    style = cell_text(color = "red", weight = "bold"),
    locations = cells_body(
      columns = vars(SVL),
      rows = SVL < 38
    )
  ) |>  
  tab_style(
    style = cell_text(color = "blue", weight = "bold"),
    locations = cells_body(
      columns = vars(SVL),
      rows = SVL >= 38
    )
  )


AAAA
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil1 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male2,3 NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37
https://luq.lter.network/data/luqmetadata1
1 Podria haber sido confundido con un extraterrestre
2 Podria tener un texto interesante
3 yo, no se la diferencia entre machos y hembras

Cambiar los fonts de una columna especifica o de toda la tabla

Para aceso alos fonts de google vea este enlace

https://fonts.google.com

small_table=AAAA %>% 
  tab_style(
    style = cell_text(
      font = google_font("Indie Flower"), 
      weight = "bold",
      size = px(20)
      ),
    locations = list(
      cells_column_labels(everything())
  )) %>% 
   tab_style(
    style = cell_text(
    font = google_font("Redressed"), size = px(14)),
    locations = list(
      cells_body(columns = everything())
  )) %>% 
  tab_style(
    style = cell_text(
    font = google_font("Redressed"), size = px(14)),
    locations = list(cells_title(groups=c("subtitle"))
  ))


small_table
Datos sobre la presencia y tamanõ de Anolis en la estación El Verde, PR
Datos recolectado por Douglas Reagan
STUDY Survey_Site TIME DATE SEASON SEX_AGE SVL
Mark/recap North Tower 10:46:00 3/13/92 0:00 dry Female NA
Mark/recap Woods walkway tower 10:15:00 2/20/89 0:00 dry Juvenil1 29
Mark/recap Woods walkway tower 11:15:00 2/21/89 0:00 dry Male2,3 NA
Mark/recap North Tower 11:06:00 3/16/92 0:00 dry Juvenil 26
Mark/recap North Tower 12:31:00 3/11/92 0:00 dry Male 45
Mark/recap North Tower 01:00:00 3/9/92 0:00 dry Female 37
https://luq.lter.network/data/luqmetadata1
1 Podria haber sido confundido con un extraterrestre
2 Podria tener un texto interesante
3 yo, no se la diferencia entre machos y hembras
library(webshot2)
#gtsave(small_table, "gt_table_excercise.png")




flextable package

library(flextable)

Flexable website

https://ardata-fr.github.io/flextable-book/index.html

library(flextable)
ft <- flextable(airquality[ sample.int(10),])
ft <- add_header_row(ft,
  colwidths = c(4, 2),
  values = c("Air quality", "Time")
)
ft <- theme_vanilla(ft)
ft <- add_footer_lines(ft, "Daily air quality measurements in New York, May to September 1973.")
ft <- color(ft, part = "footer", color = "#666666")
ft <- set_caption(ft, caption = "New York Air Quality Measurements")
ft
New York Air Quality Measurements

Air quality

Time

Ozone

Solar.R

Wind

Temp

Month

Day

36

118

8.0

72

5

2

194

8.6

69

5

10

41

190

7.4

67

5

1

23

299

8.6

65

5

7

18

313

11.5

62

5

4

19

99

13.8

59

5

8

12

149

12.6

74

5

3

14.3

56

5

5

28

14.9

66

5

6

8

19

20.1

61

5

9

Daily air quality measurements in New York, May to September 1973.

#tf <- tempfile(fileext = ".docx")
#save_as_pptx("ft1" = ft, path = "/Users/raymondtremblay/Dropbox/GitHub_Dropbox_Drive/GitHub/Visualizacion_Datos/ft.pptx")

#save_as_docx("ft1" = ft, path = "/Users/raymondtremblay/Dropbox/GitHub_Dropbox_Drive/GitHub/Visualizacion_Datos/ft.docx")