IMPORTAR TABLAS DE PÁGINAS HTML A R

JOSÉ SAAVEDRA

2022-05-27

En algunas ocasiones es importante recabar información de algunas tablas que estan almacenadas en páginas de internet, aveces suele ser tedioso copiar y pegar grandes bases de datos de tablas html a excel para luego subirlas a “R”. Por lo que se presenta un pequeño resumen en el que se importan tablas de internet a “R” de una manera facíl.

Para este ejemplo utilizaremos la libreria “rvest” la cuál nos ayudara a extaer datos de tablas en formato html.

library(rvest)

Para este ejemplo importaremos una tabla almacenada en la pagina “https://www.weedscience.org/Pages/MutationDisplayAll.aspx” (Tranel, P.J., Wright, T.R, and Heap, I.M. Mutations in herbicide-resistant weeds to Inhibition of Acetolactate Synthase . Online http://www.weedscience.com. 5/26/2022.) perteneciente a la base de datos internacional de malezas resistentes a herbicidas, la cual contiene datos de las mutaciones en malezas resistentes a herbicidas por efecto de la inhibición de acetolactato sintasa (ALS).

  1. Para nuestro caso creamos una nueva variable llamada w, en la cual copiaremos la url, de la página que necesitemos importar los datos, a su vez creamos una nueva variable llamada mutaciones en la cuál utilizaremos las funciones read_html y html_nodes.
w <- "https://www.weedscience.org/Pages/MutationDisplayAll.aspx"
mutaciones <- read_html(w)
mutaciones <- html_nodes(mutaciones, "table")
mutaciones
## {xml_nodeset (4)}
## [1] <table style="width: 950px; padding: 0px; margin: 0px; background-color:# ...
## [2] <table class="rgMasterTable" id="ctl00_Main_ctl00_ctl00" width="100%" sty ...
## [3] <table class="rgHeader" border="0" width="100%" cellpadding="1" style="fo ...
## [4] <table style="width: 100%"><tr>\n<td><a href="http://www.hracglobal.com"> ...
  1. la función length nos permite saber cuantas tablas existen en la página, en nuestro caso existen 4 tablas
length(mutaciones) # Hay en total 4 tablas
## [1] 4
  1. Para elegir nuestra tabla a importar utilizamos la función sapply la cuál nos devuelve un vector o matriz.
sapply(mutaciones, function(x) dim(html_table(x, fill = TRUE)))
##      [,1] [,2] [,3] [,4]
## [1,]    1  183    2    1
## [2,]    2   10    1    3
  1. Para nuestro caso elegimos la tabla 2 que contiene 183 filas y 10 columnas.
ALS <- html_table(mutaciones[[2]], fill = TRUE) 
ALS
## # A tibble: 183 × 10
##    X1                      X2    X3    X4    X5    X6    X7    X8    X9    X10  
##    <chr>                   <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1 "MUTATIONS IN HERBICID… <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  2 "Cite:  Tranel, P.J., … <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA> 
##  3 "Amino Acid"            Subs… Spec… PTB … IMI … SCT … SU  … TP  … Year… Deta…
##  4 "Ala 122"               Thr   Xant… S     R     ND    S     ND    1995  Deta…
##  5 ""                      Thr   Sola… ND    R     ND    S     ND    2000  Deta…
##  6 ""                      Thr   Amar… ND    R     ND    ND    ND    2005  Deta…
##  7 ""                      Thr   Amar… ND    R     ND    S     ND    2005  Deta…
##  8 ""                      Thr   Amar… S     R     ND    S     S     2006  Deta…
##  9 ""                      Val   Aper… ND    ND    S     R     ND    2011  Deta…
## 10 ""                      Tyr   Raph… ND    R     ND    R     R     2012  Deta…
## # … with 173 more rows

Edición de la tabla para nuestro ejemplo

Ahora procedemos a eliminar las filas innecesarias (1 y 2).

ALS <- ALS [-c(1, 2), ]
ALS
## # A tibble: 181 × 10
##    X1           X2      X3             X4    X5    X6    X7    X8    X9    X10  
##    <chr>        <chr>   <chr>          <chr> <chr> <chr> <chr> <chr> <chr> <chr>
##  1 "Amino Acid" Subs(1) Species        PTB … IMI … SCT … SU  … TP  … Year… Deta…
##  2 "Ala 122"    Thr     Xanthium stru… S     R     ND    S     ND    1995  Deta…
##  3 ""           Thr     Solanum ptyca… ND    R     ND    S     ND    2000  Deta…
##  4 ""           Thr     Amaranthus re… ND    R     ND    ND    ND    2005  Deta…
##  5 ""           Thr     Amaranthus po… ND    R     ND    S     ND    2005  Deta…
##  6 ""           Thr     Amaranthus hy… S     R     ND    S     S     2006  Deta…
##  7 ""           Val     Apera spica-v… ND    ND    S     R     ND    2011  Deta…
##  8 ""           Tyr     Raphanus raph… ND    R     ND    R     R     2012  Deta…
##  9 ""           Val     Echinochloa c… S     R     ND    ND    S     2013  Deta…
## 10 ""           Thr     Echinochloa c… S     R     ND    ND    R     2013  Deta…
## # … with 171 more rows

Procedemos a renombrar el encabezado tal y como está en la página de internet.

colnames(ALS) <- c("Amino Acid","Subs","species",
                    "PTB", "IMI","SCT","SU",
                    "TP","year","Details")
ALS
## # A tibble: 181 × 10
##    `Amino Acid` Subs    species      PTB   IMI   SCT   SU    TP    year  Details
##    <chr>        <chr>   <chr>        <chr> <chr> <chr> <chr> <chr> <chr> <chr>  
##  1 "Amino Acid" Subs(1) Species      PTB … IMI … SCT … SU  … TP  … Year… Details
##  2 "Ala 122"    Thr     Xanthium st… S     R     ND    S     ND    1995  Details
##  3 ""           Thr     Solanum pty… ND    R     ND    S     ND    2000  Details
##  4 ""           Thr     Amaranthus … ND    R     ND    ND    ND    2005  Details
##  5 ""           Thr     Amaranthus … ND    R     ND    S     ND    2005  Details
##  6 ""           Thr     Amaranthus … S     R     ND    S     S     2006  Details
##  7 ""           Val     Apera spica… ND    ND    S     R     ND    2011  Details
##  8 ""           Tyr     Raphanus ra… ND    R     ND    R     R     2012  Details
##  9 ""           Val     Echinochloa… S     R     ND    ND    S     2013  Details
## 10 ""           Thr     Echinochloa… S     R     ND    ND    R     2013  Details
## # … with 171 more rows

Para nuestro caso eliminamos el anterior encabezado innecesario.

ALS <- ALS [-c(1), ] # eliminar la primer  fila

Finalmente podremos llamar a nuestra tabla a “R”

ALS
## # A tibble: 180 × 10
##    `Amino Acid` Subs  species        PTB   IMI   SCT   SU    TP    year  Details
##    <chr>        <chr> <chr>          <chr> <chr> <chr> <chr> <chr> <chr> <chr>  
##  1 "Ala 122"    Thr   Xanthium stru… S     R     ND    S     ND    1995  Details
##  2 ""           Thr   Solanum ptyca… ND    R     ND    S     ND    2000  Details
##  3 ""           Thr   Amaranthus re… ND    R     ND    ND    ND    2005  Details
##  4 ""           Thr   Amaranthus po… ND    R     ND    S     ND    2005  Details
##  5 ""           Thr   Amaranthus hy… S     R     ND    S     S     2006  Details
##  6 ""           Val   Apera spica-v… ND    ND    S     R     ND    2011  Details
##  7 ""           Tyr   Raphanus raph… ND    R     ND    R     R     2012  Details
##  8 ""           Val   Echinochloa c… S     R     ND    ND    S     2013  Details
##  9 ""           Thr   Echinochloa c… S     R     ND    ND    R     2013  Details
## 10 ""           Ser   Amaranthus pa… ND    ND    ND    ND    ND    2017  Details
## # … with 170 more rows