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).
- 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"> ...
- 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
- 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
- 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 filaFinalmente 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