Как соединить html-таблицы в R друг над другом?

#r

Вопрос:

В настоящее время у меня есть скрипт R, который извлекает данные с веб-страницы в таблицы html, у меня есть три таблицы, и я хотел бы знать, как соединить или объединить их, одну поверх другой, так как на данный момент результат дает мне таблицы, расположенные рядом друг с другом, и он мне не служит.

 library(rvest)

urls.colombia.compra.microsoft <- paste0("https://colombiacompra.gov.co/tienda-virtual-del-estado-colombiano/ordenes-compra?page=", 
                               0:11, 
                               "amp;number_order=amp;state=amp;entity=amp;tool=IAD Software I - Microsoftamp;date_to_= amp;date_from_=")


base.colombia.compra.microsft <- purrr::map_df(urls.colombia.compra.microsoft, ~.x %>% read_html() %>% html_table())

base.colombia.compra.microsft

urls.colombia.compra.google <- paste0("https://colombiacompra.gov.co/tienda-virtual-del-estado-colombiano/ordenes-compra?page=", 
                               0:11, 
                               "amp;number_order=amp;state=amp;entity=amp;tool=IAD Software I - Googleamp;date_to_= amp;date_from_=")

base.colombia.compra.google <- purrr::map_df(urls.colombia.compra.google, ~.x %>% read_html() %>% html_table())

base.colombia.compra.google

urls.colombia.compra.nube <- paste0("https://colombiacompra.gov.co/tienda-virtual-del-estado-colombiano/ordenes-compra?page=", 
                                      0:11, 
                                      "amp;number_order=amp;state=amp;entity=amp;tool=Nube Pública IIIamp;date_to_= amp;date_from_=")

base.colombia.compra.nube <- purrr::map_df(urls.colombia.compra.nube, ~.x %>% read_html() %>% html_table())

base.colombia.compra.nube

merge(base.colombia.compra.microsft, base.colombia.compra.google, by = "Orden de Compra")

union <- dplyr::full_join(dplyr::full_join(base.colombia.compra.microsft, base.colombia.compra.google, by = "Orden de Compra"), base.colombia.compra.nube, by = "Orden de Compra")
 

Ответ №1:

Вы можете использовать dplyr::bind_rows их для объединения в одну таблицу со id столбцом, чтобы различать эти три.

 union <- dplyr::bind_rows(base.colombia.compra.microsft, 
                          base.colombia.compra.google, 
                          base.colombia.compra.nube, .id = 'id')
 

Ответ №2:

Мы могли бы использовать rbindlist

 library(data.table)
union <- rbindlist(list(base.colombia.compra.microsft, 
                          base.colombia.compra.google, 
                          base.colombia.compra.nube), idcol = 'id')