2010-08-03 10 views
13

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.¿Cómo se lee en múltiples archivos .txt en R?

¿Algún ayuda?

EDIT:

Listado de los archivos no es un problema. Pero estoy teniendo problemas para pasar de la lista al contenido. He probado algunos de los códigos de here, pero me da 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 fragmentos de código que aclarar este problema sería muy apreciada.

+0

El problema es 'txt' no es una función. El enlace al que apunta es sobre la función 'read.csv'. – Wok

Respuesta

4

Gracias por todas las respuestas!

Mientras tanto, también pirateé un método por mi cuenta. Déjame saber si se trata de ninguna utilidad:

library(foreign) 

setwd("/path/to/directory") 

files <-list.files() 

data <- 0 


for (f in files) { 

tempData = scan(f, what="character") 

data <- c(data,tempData)  

} 
4

Consulte la ayuda de 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 desea tenerlos todos a la vez, primero debe tener contenido en un solo archivo. Una opción sería usar cat para escribir todos los archivos en stdout y leer eso usando popen(). Ver help(Connections) para más.

+0

gracias, pero todavía no está claro. Verifique mi edición :) –

+0

Bueno, cree 'txt'. –

25

Puede 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) 
+0

ligeramente más limpio: 'lapply (lista de archivos, FUN = read.table, header = TRUE)' – RockScience

2

No es una forma muy, muy fácil de hacer esto ahora: el readtext paquete.

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

Realmente es así de fácil.

0

Hay dos formas rápidas de leer varios archivos y ponerlos en una trama de datos simple o data.table

Usando fread de data.table paquete

# 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 de tidyverse paquete:

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 archivo, utilice basename o gsub funciones

Cuestiones relacionadas