Guadalupe, parte de nuestro staff, nos ha hecho el favor de crear este post porque domina a la perfección dicho tema.
Solución:
Puedes probar esto:
filelist = list.files(pattern = ".*.txt")
#assuming tab separated values with a header
datalist = lapply(filelist, function(x)read.table(x, header=T))
#assuming the same header/columns for all files
datafr = do.call("rbind", datalist)
Existen dos tres formas rápidas de leer varios archivos y ponerlos en un solo marco de datos o data.table
Primero obtenga la lista de todos los archivos txt (incluidos los de las subcarpetas)
list_of_files <- list.files(path = ".", recursive = TRUE,
pattern = "\.txt$",
full.names = TRUE)
1) Uso fread()
c/ rbindlist()
desde el data.table
paquete
#install.packages("data.table", repos = "https://cran.rstudio.com")
library(data.table)
# Read all the files and create a FileName column to store filenames
DT <- rbindlist(sapply(list_of_files, fread, simplify = FALSE),
use.names = TRUE, idcol = "FileName")
2) Uso readr::read_table2()
c/ purrr::map_df()
desde el tidyverse
estructura:
#install.packages("tidyverse",
# dependencies = TRUE, repos = "https://cran.rstudio.com")
library(tidyverse)
# Read all the files and create a FileName column to store filenames
df <- list_of_files %>%
set_names(.) %>%
map_df(read_table2, .id = "FileName")
3) (Probablemente el más rápido de los tres) Usar vroom::vroom()
:
#install.packages("vroom",
# dependencies = TRUE, repos = "https://cran.rstudio.com")
library(vroom)
# Read all the files and create a FileName column to store filenames
df <- vroom(list_of_files, .id = "FileName")
Nota: para limpiar los nombres de los archivos, utilice basename
o gsub
funciones
Punto de referencia:readr
contra data.table
contra vroom
para grandes datos
Editar 1: para leer múltiples csv
archivos y salte el header
usando readr::read_csv
list_of_files <- list.files(path = ".", recursive = TRUE,
pattern = "\.csv$",
full.names = TRUE)
df <- list_of_files %>%
purrr::set_names(nm = (basename(.) %>% tools::file_path_sans_ext())) %>%
purrr::map_df(read_csv,
col_names = FALSE,
skip = 1,
.id = "FileName")
Editar 2: para convertir un patrón que incluye un comodín en la expresión regular equivalente, utilice glob2rx()
Hay una manera muy, muy fácil de hacer esto ahora: el Lea el texto paquete.
readtext::readtext("path_to/your_files/*.txt")
Realmente es así de fácil.
Ten en cuenta difundir este escrito si si solucionó tu problema.