¿Cómo se lee en múltiples archivos .txt en R?

Estoy usando R para visualizar algunos datos, todos en formato .txt. Hay unos pocos cientos de archivos en un directorio y quiero cargarlo todo en una sola tabla, en una sola toma.

¿Alguna ayuda?

EDITAR:

Listar los archivos no es un problema. Pero estoy teniendo problemas para pasar de la lista al contenido. He intentado algunos de los códigos desde aquí , pero obtengo un error con esta parte:

all.the.data <- lapply( all.the.files, txt , header=TRUE) 

diciendo

  Error in match.fun(FUN) : object 'txt' not found 

Cualquier fragmento de código que aclare este problema sería muy apreciado.

Puedes intentar 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) 

Mira la ayuda para las funciones dir() aka list.files() . Esto le permite obtener una lista de archivos, posiblemente filtrados por expresiones regulares, sobre los cuales puede hacer un bucle.

Si quieres todos a la vez, primero debes tener contenido en un archivo. Una opción sería usar cat para escribir todos los archivos en stdout y leerlos con popen() . Ver help(Connections) para más.

¡Gracias por todas las respuestas!

Mientras tanto, también pirateé un método por mi cuenta. Avíseme si es útil:

 library(foreign) setwd("/path/to/directory") files < -list.files() data <- 0 for (f in files) { tempData = scan( f, what="character") data <- c(data,tempData) } 

Hay dos formas rápidas de leer múltiples archivos y ponerlos en un solo dataframe o data.table

Usando fread desde el paquete data.table

  # List all txt files including sub-folders list_of_files < - list.files(path = ".", recursive = TRUE, pattern = "\\.txt$", full.names = TRUE) 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" ) 

Usando purrr::map_df y readr::read_table2 del paquete tidyverse :

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

Nota: para limpiar los nombres de los archivos, use las funciones basename o gsub

Hay una manera muy, muy fácil de hacer esto ahora: el paquete readtext .

 readtext::readtext("path_to/your_files/*.txt") 

Realmente es así de fácil.