10.9 Aplikace
Někdy potřebujeme načíst velké množství tabulek z jednotlivých .csv
souborů, zkontrolovat jejich konzistenci a spojit je dohromady. To dělá následující kód, který představuje zjednodušenou verze části jednoho mého projektu:
# načtení potřebných balíků
library(readr)
library(purrr)
# adresář s daty
<- file.path("..", "testdata")
DATADIR # seznam jmen souborů, které splňují určitou masku danou regulárním výrazem
<- dir(DATADIR, "products_.*\\.csv\\.gz", full.names = TRUE)
PRODUCT_FILES # načtení jednotlivých souborů, sloupcům vnutíme typ řetězec
<- map(PRODUCT_FILES,
product_data ~ read_csv2(file = ., col_types = cols(.default = "c"))
# kontrola, že všechny tabulky mají stejnou strukturu
<- map(product_data, colnames)
product_col_names <- map_chr(product_col_names,
product_col_names_test ~ all.equal(product_col_names[[1]], .))
if (!(all(identical(product_col_names_test,
rep(TRUE, length = length(product_col_names))))))
stop("Product data sets have different columns!")
# spojení jednotlivých tabulek do jedné
<- reduce(product_data, rbind) product_data
Vlastní spojení dat je možné provést efektivněji pomocí funkce bind_rows()
z balíku dplyr, která je efektivnější a rychlejší:
<- dplyr::bind_rows(product_data) product_data