Saltar al contenido

¿Cómo se leen varios archivos .txt en R?

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

vroom-benchmark


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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *